Javascript - var 有何不同?
Javascript - How is var making a difference?
请参阅以下片段。
第一个错误,这是预期的。
第二个通过。是什么原因,或者两个片段之间的区别。
var myvar = 4,7 //Error
myvar2 = 3,4 //No error
在第一行中,您用逗号分隔声明 (Variable Statement),此处缺少变量名。
第二行使用的是Comma Operator,效果很好,即使不需要。
问题出现了
If second was a comma operator, then the value in myvar2 would be 4. but it is 3!
是因为逗号和等号的Operator Precedence。进行赋值,稍后计算逗号。
第一行基本上是这样翻译的:
var myvar = 4,
7
所以 "second line" 会抛出错误,因为 JavaScript 解释器希望您要分配两个变量但找不到第二个变量的名称。例如,您可以像这样分配变量
var first = 0,
obj = {},
s = "my string",
array = [1,2,3,4,5];
不会出错,因为它是有效的 JavaScript 并且每个值都有一个可以分配给它的变量名。
在第二个示例中,您只分配了最后一个数字 - 没有 var
关键字 JavaScript 不会引发错误,只会分配第一个值。有点像写下面的
myvar = 3
4
所以第一个值被赋值了。我以前把它搞混了(见历史)。当将 myvar = 3,4
传递给控制台时,它看起来像是分配了 4,但它只是打印到控制台中——换句话说,,
后面的部分被评估了。当您将以下内容粘贴到控制台时,您可以看到这一点
myvar = 3, _this_function_doesnt_exist()
此处解析器将抛出错误:Uncaught ReferenceError: _this_function_doesnt_exist is not defined(…)
- 之前的表达式 (myvar = 3
) 仍在执行,因此 myvar
将为 3.
我曾经只用一个 var
关键字来编写我的所有变量,但发现它相当混乱和丑陋。一般来说,我建议每行使用一个赋值,并在每个变量前使用 var
(或者 const
、let
等,如果您编写 ECMAScript 2015/ES6)
只是为了进一步扩展 Nina Schloz
答案
var myvar = 4, 7 // throws Uncaught SyntaxError: Unexpected number
// Because declared variables are hoisted to the top of the scope,this translates to
/*
var myvar;
var 7; // throws Uncaught SyntaxError: Unexpected number
myvar = 4; // this never gets executed
*/
var anotherVar = 4, x; // this doesn't throw an error
// this translates to
/*
var anotherVar;
var x;
anotherVar=4;
*/
当我们执行 myvar2=3,4
时,我们使用 comma operator
,它首先将 3 分配给 undeclared variable myvar2
,然后 returns 表达式的最后一个值(从左到右)是数字 4
请参阅以下片段。 第一个错误,这是预期的。 第二个通过。是什么原因,或者两个片段之间的区别。
var myvar = 4,7 //Error
myvar2 = 3,4 //No error
在第一行中,您用逗号分隔声明 (Variable Statement),此处缺少变量名。
第二行使用的是Comma Operator,效果很好,即使不需要。
问题出现了
If second was a comma operator, then the value in myvar2 would be 4. but it is 3!
是因为逗号和等号的Operator Precedence。进行赋值,稍后计算逗号。
第一行基本上是这样翻译的:
var myvar = 4,
7
所以 "second line" 会抛出错误,因为 JavaScript 解释器希望您要分配两个变量但找不到第二个变量的名称。例如,您可以像这样分配变量
var first = 0,
obj = {},
s = "my string",
array = [1,2,3,4,5];
不会出错,因为它是有效的 JavaScript 并且每个值都有一个可以分配给它的变量名。
在第二个示例中,您只分配了最后一个数字 - 没有 var
关键字 JavaScript 不会引发错误,只会分配第一个值。有点像写下面的
myvar = 3
4
所以第一个值被赋值了。我以前把它搞混了(见历史)。当将 myvar = 3,4
传递给控制台时,它看起来像是分配了 4,但它只是打印到控制台中——换句话说,,
后面的部分被评估了。当您将以下内容粘贴到控制台时,您可以看到这一点
myvar = 3, _this_function_doesnt_exist()
此处解析器将抛出错误:Uncaught ReferenceError: _this_function_doesnt_exist is not defined(…)
- 之前的表达式 (myvar = 3
) 仍在执行,因此 myvar
将为 3.
我曾经只用一个 var
关键字来编写我的所有变量,但发现它相当混乱和丑陋。一般来说,我建议每行使用一个赋值,并在每个变量前使用 var
(或者 const
、let
等,如果您编写 ECMAScript 2015/ES6)
只是为了进一步扩展 Nina Schloz
答案
var myvar = 4, 7 // throws Uncaught SyntaxError: Unexpected number
// Because declared variables are hoisted to the top of the scope,this translates to
/*
var myvar;
var 7; // throws Uncaught SyntaxError: Unexpected number
myvar = 4; // this never gets executed
*/
var anotherVar = 4, x; // this doesn't throw an error
// this translates to
/*
var anotherVar;
var x;
anotherVar=4;
*/
当我们执行 myvar2=3,4
时,我们使用 comma operator
,它首先将 3 分配给 undeclared variable myvar2
,然后 returns 表达式的最后一个值(从左到右)是数字 4