一道JS面试题,连续赋值,求解

// 变种题
(function(){
 var  x = c =  b = {a:1}
})()

console.log(x.a); // error , x is not defined
console.log(c,b) // {a: 1} {a: 1}

这里为何x.a是undefined呢

阅读 1.2k
1 个回答

这涉及到的是变量作用域提升知识:
var x = c = b = {a:1} 等价于

b = {a:1};  //注意没有var
c = b;  //注意没有var
var x = c;

如果你使用了var关键字,这个变量将只在定义它的函数内生效。 没有使用var关键字,这个变量将提升为全局变量。
所以,在外部直接使用x.a时直接报错,因为在外面的作用域中,x根本未定义,更谈不上x.a。而c和b是全局变量,能够被访问到。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题