var scope = 'global';
var f = function() {
console.log(scope); // 输出 undefined
var scope = 'f';
}
f();
JavaScript 的作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域。在函数中引用一个变量时,JavaScript 会先搜索当前函数作用域,或者称为“局
部作用域”,如果没有找到则搜索其上层作用域,一直到全局作用域。
这是 JavaScript 的一个特性,按照作用域搜索顺序,在 console.log 函数访问 scope 变
量时,JavaScript 会先搜索函数 f 的作用域,恰巧在 f 作用域里面搜索到 scope 变量,
所以上层作用域中定义的 scope 就被屏蔽了,但执行到 console.log 语句时,scope 还
没被定义,或者说初始化,所以得到的就是 undefined 值了
网友评论