如何理解这题中的 JavaScript 作用域
function a(x,y){
y = function() { x = 2; };
return function(){
var x = 3;
y();
console.log(x);
}.apply(this, arguments);
}
a();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
ECMAScript 5 是
函数级作用域
简单的来说,看一个函数就好了。
此段代码中的
x
的输出在 内部的高阶函数里,根据作用域链的引用,就是在当前函数级别的作用域中找变量。找到了当前作用域的
x
为3,所以输出就是3了。如果把
x=3
这行去掉,那么因为在该层作用域上找不到
x
变量,就会到上层函数中找。同理
y()
也一样,所以在console.log(x)
中找到的x
和y()
里改变的x
是同一个引用。所以输出
2
变量作用域是在定义函数的时候就已经确定了,而不是执行时,所以y()执行时改变的x跟var x=3的x不是同一回事,console.log(x)就输出3了
3,在
var x = 3;
y();
console.log(x);
已经确定局部作用域