前端知识点回顾——Javascript篇(二)

JavaScript的解析顺序

第一阶段:编译期

  • 寻找关键字声明的变量、函数声明的变量,同时会对变量进行作用域的绑定

  • var声明的变量,在编译期会赋一个默认值undefined,变量提升的特性。

  • ES6及以后所有的变量申明方式都不具备变量提升,在声明之前调用会报错,这个现象在语法上称为暂时性死区TDZ。

  • 如果一个变量同时被var声明又被function声明,则变量提升的值以函数为准(函数为一等公民)。但最后是以赋值的数值作为变量的最终值。

console.log(a);  //函数a console.log(2)
var a = 10;
function a() {
    console.log(1);
}
function a(){
    console.log(2);
}
console.log(a);  //10
  • 函数的形参也会有变量声明的行为,在编译期最后,执行期最前。
function fn(num) {
    //形参也会有一个变量声明的行为,在编译最后执行最前
    //根据实际情况我理解这个给形参赋予实参的数更像是var声明的变量提升后默认有undefined值一样
    //所以下面console输出了函数,函数为一等公民
    console.log(num);  //输出函数num
    var num = 3;
    function num(){}   //如果这里去掉则前面的console输出10
    console.log(num);  //3
}
fn(10);

第二阶段:执行期

数组和对象的深拷贝方法

数组: arr.concat() 或 [...arr]

对象: 若没有函数的话可以用JSON.stringify 和 JSON.parse转换,有函数就需要那种遍历的方法来拷贝。

日期对象Date

let date1 = new Date('2019/3/17 20:00:00');  //创建日期对象
//getFullYear
//getMonths 0-11
//getDate 1-31
//getDay 0-6
//getHours
//getMinutes
//getSeconds
//getTime
console.log(date1.toLocaleDateString())  //以本地表示方法表示日期
console.log(date1.toLocaleTimeString())  //以本地表示方法表示时间
console.log(date1.toLocaleString());  //上面两个的结合

console.log(date1.toDateString());  //标准方法表示日期
console.log(date1.toTimeString());  //标准方法表示时间
console.log(date1.toUTCString());  //标准方法表示的UTC时间

let date = new Date();
console.log(date.getTimezoneOffset());//-480  返回本地时间与UTC时间的分钟数差,UTC比东八区慢8小时

Editted by: simple

——还在摸爬滚打中的前端小萌新
原文地址:https://www.cnblogs.com/simpul/p/11020151.html