JS没有块级作用域---for循环和if语句中的执行环境

49 阅读1分钟
  1. 在JavaScript 中,if语句和for循环中的变量声明会将变量添加到当前的执行环境(作用域)
  2. JavaScript中没有块级作用域
  3. var声明的变量会自动被添加到最接近的环境中

Demo1

var myAlerts = [];
for (var i = 0; i < 5; i++) {
    myAlerts.push(
        function inner(i) {
            alert(i); // 此时的i将会添加到inner函数自己的执行环境的变量对象上
        }
    );
}
myAlerts[0]();
myAlerts[1]();
myAlerts[2]();
myAlerts[3]();
myAlerts[4]();

Demo2

// 全局作用域global context
var myAlerts = [];
for (var i = 0; i < 5; i++) {
    myAlerts.push(
        function inner() {
            alert(i); //此时的i会被添加到 global context的环境对象上
        }
    );
}
myAlerts[0]();
myAlerts[1]();
myAlerts[2]();
myAlerts[3]();
myAlerts[4]();

参照链接