标签:变量提升 输出 define undefined 存在 代码块 i++ col 绑定
{ let a = 10; var b = 1; } b // 1 a // ReferenceError: a is not defined.
在代码块中声明了a,b。然后a is not defined.这是因为let命令只在对应的代码块中有效,我们在外部去引用它,就会报错。这就是let的块级作用域的效果,如果不太清楚什么是块级作用域。我们来看下面的例子。
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[0]();//10 a[6](); // 10
i在for循环中定义的是全局变量。我们在调用函数时。函数内部的i引用的是全局的i,所以打印出来的 是10. 我们之前是这样解决的
var a = []; for (var i = 0; i < 10; i++) { a[i] = (function (a) { return function(){ console.log(a); } }(i)); } a[0]();//0 a[6](); // 6
使用了立即执行函数将i的值传入了内部的函数,这样内部的函数就能够获取到对应的i。
我们用let来代替var,最后输出的是 6。
var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6
因为我们每一次的循环都生成了一个新的块级作用域,内部保存着i的值,所以就会打印出6.
let不存在变量提升
console.log(a); console.log(b); var a=0;//undefined let b=0;//ReferenceError: b is not defined
TDZ(暂时性死区) let命令在块级作用域中,即使不存在变量提升,它也会影响当前块级作用域,即绑定在了当前作用域。在作用域中引用外部的变量将会报错。
var a=10; { console.log(a); //ReferenceError: a is not defined let a=10; }
标签:变量提升 输出 define undefined 存在 代码块 i++ col 绑定
原文地址:https://www.cnblogs.com/jassin-du/p/9472631.html