为了账号安全,请及时绑定邮箱和手机立即绑定

function内,var a = b = 1; b 为什么会是全局变量?

为什么这样设计?

正在回答

7 回答

这是语法规则决定的,其实是一个非常不好的设定。

至于为什么这么设定,这个就好像为什么你的名字就是这样。。。。因为就是这么起的。

0 回复 有任何疑惑可以回复我~
#1

Timi_Sakura

这并不是一个完美的回答,因为确实有逻辑可以解释它的,一般的计算机语言都是从右往左解释的,这里的var a = b = 1;实际上等于 b = 1; var a = b; 所以b是全局变量而a是局部变量。我有Java基础,但在JS上还是初学者不知道这样理解对不对。
2019-02-07 回复 有任何疑惑可以回复我~
#2

Timi_Sakura

我已经看到3-4的严格模式这一章了,突然想到如果我的推断是对的,那么在严格模式下应该不能使用这种语法,结果应验了我的想法,在严格模式中var a = b = 1;会报错。
2019-02-07 回复 有任何疑惑可以回复我~

赋值是从右往左进行的,也就是说这一行先执行b=1,这时候b就是全局变量了,没有被var过。然后是var a = b;

a被声明了,是局部变量。

8 回复 有任何疑惑可以回复我~

(function(){var a=b=5})();

console.log(b);

console.log(a);

为何b有值,a没有

0 回复 有任何疑惑可以回复我~
#1

林中飞虎

b=5是全局变量,var a=b是局部变量所以a在外部是访问不到的
2017-03-29 回复 有任何疑惑可以回复我~

var a=b=1;计算优先级 创建全局变量b=1,再在函数中定义一个变量a,a=b

1 回复 有任何疑惑可以回复我~

应为你赋值给a,b=1,是不存在的,var a=b=1,就可以等同于,b=1;var a=b;

3 回复 有任何疑惑可以回复我~
#1

旋律丶秋凉

你这样说有问题好吧,a和b在函数里面都是number
2017-05-05 回复 有任何疑惑可以回复我~

是因为下一节提到的给未声明的变量赋值,此变量就变为全局变量?那么严格模式下应该不可以这样声明的吧。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

function内,var a = b = 1; b 为什么会是全局变量?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信