在下面的代码中,我预计a
和b
都是3
。但是,a
是undefined
和b
是3
。为什么?为什么a在var a = b = 3时b是3时未定义?
(function(){
var a = b = 3;
})();
console.log(typeof a);//"undefined"
console.log(b);//3
在下面的代码中,我预计a
和b
都是3
。但是,a
是undefined
和b
是3
。为什么?为什么a在var a = b = 3时b是3时未定义?
(function(){
var a = b = 3;
})();
console.log(typeof a);//"undefined"
console.log(b);//3
这里的问题是,大多数开发人员理解的语句var a = b = 3;
被简写:
var b = 3;
var a = b;
但事实上,VAR A = B = 3;实际上是简写:
b = 3;
var a = b;
因此,B结束是一个全局变量(因为它不被var关键字之后)并且仍然在范围外连封闭函数的。
的原因是不确定的是,一个是局部变量,自我执行的匿名函数
(function(){
var a = b = 3;
})();
你说得对。我删除了严格使用说明。 – user2466202 2014-12-06 22:59:13
var a=b=3
是一样的:
var a = (b = 3)
而且var
声明仅适用到a
,而不是b
。您可以检查var
语句here的语法。
因此a
将在本地范围内定义,b
将在全局范围内定义。内函数a
和b
都是3,但函数返回后注册的局部变量(a
)被删除。由于b
在全局范围内定义,因此不会被删除。
a
IS 3确实存在,但它处于匿名函数的范围之内。
此行var a = b = 3
居然是:
b = 3
,而b
被声明为一个全局变量。
转让快递b=3
的返回值是,是,分配的值为3
。
var a = the return value of previous expression
,因此等于var a = 3
,但这次是a
是一个局部变量。
外anounymous功能,b
是访问,但a
根本不存在,因为在全球范围没有定义。
我在下面的风格写道:
console.log(typeof b);//"number"
console.log(a);// error with a is not defined
所以在你的情况下a
是无法识别的,因为它是不是在全球范围内。但是b
被视为全局。 var
用于声明局部变量。
比较之下
'use strict'
(function(){
var a = b = 3; // ERROR. Prevents global variable name clash
})();
而且
(function(){
var a = b = 3; // Silently assigns 3 to a global variable b
})();
console.log(typeof a);//"undefined"
console.log(b);// 3
downvote的原因是什么?答案是事实。 http://jsfiddle.net/9h9jqts8/ – tsuz 2015-01-03 08:48:43
似乎并没有表现在这[小提琴]这种方式(http://jsfiddle.net/cgskkut9/) – 2014-12-06 07:37:15
它的工作原理代码,我在头部和身体都用铬进行了检查。 – 2014-12-06 07:38:06
@HoboSapiens:那是因为你没有把相关的代码放到你的小提琴中...尝试http://jsfiddle.net/cgskkut9/1/ – Chris 2014-12-06 19:52:49