前端知识点回顾——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小时