函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域

163 阅读1分钟

函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在的作用域无关。

var a = 1;var x = function () { 
console.log(a);
};
function f() {  
var a = 2;  x();
}
f() // 1

上面代码中,函数x是在函数f的外部声明的,所以它的作用域绑定外层,内部变量a不会到函数f体内取值,所以输出1,而不是2