使用var 实现let

603 阅读1分钟

使用var 实现let的for循环

   

   Let 与var的区别是:let为局部变量,存在暂时性死区而var为全局变量

暂时性死区:es6规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。在代码块内,使用let命令声明变量之前,该变量都是不可用的,这在语法上,称之为’暂时性死区’

var实现let 利用闭包的的性质解决方法:

var a = []

for (var i = 0; i < 3; i ++) {

 (function () {

var b = i

a[i] = function() {

// 注意不能直接输出i,不然依旧一样

console.log('i为:' + i)

    console.log('b为:' + b)

}

  }) (i)

}

a[0]()  // i为3,b为0

I的值与b的值不同的原因是因为一个以实参一个以行参传的,实参传递了,但是行参没有被接受