在Es5之前只有全局作用域和函数作用域。
范围:在winodw全局里面都生效
例子:
for(var i=0;i<=5;i++){
}
console.log(window.i===i);
返回的结果是:True
范围:在这个函数里面生效
例子:
function fn(b) {
console.log(b);
}
console.log(b);
fn(10);
返回的结果:
for (let i = 0; i <= 5; i++) {}
console.log(window.i === i);
console.log(window.i);
underfined
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
for (let i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
6.不是块级的图示:
for (let i = 0; i < 5; i++) {
console.log(i);
}
for (var i = 0; i < 5; i++) {
console.log(i);
}
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
f1()
分析:调用f1这个函数,可以看出f1这个函数里面使用的let有自己的块级作用域,在if(){ let n}
在这个括号里面有定义了自己的块级作用域
function f1() {
var n = 5;
if (true) {
var n = 10;
}
console.log(n); // 5
}
f1();
分析:
预解析:
var n
n=5
n=10
输出结果:
10
在Es5之前只有函数作用域和全局作用域,Es6之后推出了块级作用域,使定义变量更加的规范,更加的合理。