为什么这样设计?
这是语法规则决定的,其实是一个非常不好的设定。
至于为什么这么设定,这个就好像为什么你的名字就是这样。。。。因为就是这么起的。
赋值是从右往左进行的,也就是说这一行先执行b=1,这时候b就是全局变量了,没有被var过。然后是var a = b;
a被声明了,是局部变量。
(function(){var a=b=5})();
console.log(b);
console.log(a);
为何b有值,a没有
var a=b=1;计算优先级 创建全局变量b=1,再在函数中定义一个变量a,a=b
应为你赋值给a,b=1,是不存在的,var a=b=1,就可以等同于,b=1;var a=b;
是因为下一节提到的给未声明的变量赋值,此变量就变为全局变量?那么严格模式下应该不可以这样声明的吧。