ES6 知识点梳理(上篇)

132 阅读2分钟

块级声明用于声明在指定块的作用域之外无法访问的变量,块级作用域(也被称为词法作用域)存在于:

  • 函数内部
  • 块中(字符 { } 之间的区域)

1,let 声明

用let声明可以将变量的作用域限制在当前的代码块汇中,避免变量提升

变量提升(Hoisting)机制:在函数作用域或全局作用域中通过关键字var声明的变量,无论在哪里声明,都会当成在当前作用域顶部声明的变量


2,const声明

使用const声明的是敞亮,每个通过const声明的常量必须初始化


3,临时死区(TDZ Temporal Dead Zone)

javascript引擎在扫描代码发现变量声明时,要么将变量提升到作用域顶部,要么放在TDZ中。只有在执行过变量声明语句后,变量才会从TDZ中移出,然后方可访问


4,循环块中的作用域绑定

循环中的let声明,模仿IIFE(立即调用函数表达式)所做的一起来简化循环过程,每次迭代循环都会创建一个新的变量,并以之前迭代中同名变量的值将其初始化


例子:

var funcs = [];
for(var i=0; i<10;i++) {
  funcs.push(function() {
     console.log(i)
})
}

funcs.forEach(function(func){
func();   //输出10次数字10
}) 

在循环中使用let声明后:

var funcs = [];
for(let i=0; i<10;i++) {
  funcs.push(function() {
     console.log(i)
})
}

funcs.forEach(function(func){
func();   //输出0,1,2,3,4,5,6,7,8,9
}) 


5,在ES6中的   默认参数值

function make(url, timeout = 2000,callback = function(){}) {
  //函数的其余部分
}

参数名 = 默认值 的方法给参数赋予默认值,在已经制定默认值的参数后,可以继续声明无默认值的参数

在引用参数默认值的时候,只允许引用前面参数的值,即先定义的参数能访问后定义的参数


6,ES6 中 默认参数表达式

     函数的参数默认值可以传表达式

 

   function getValue() {
      return 5;
}
function add( first, second =  getValue()) {
     return first + second
}
console.log(add(1,1)) ;  //2
console.log(add(1)) ;  //6

注意:当使用函数调用结果作为默认参数值时,如果忘记小括号,例如:second = getValue,则最终传入的是对函数的引用,而不是函数的调用结果