[英]Global Variable in JavaScript , variables defined without var
下面的函数将返回b is not defined
因为编译器将在函数中查找然后在全局范围内搜索变量b
。
但是,我假设定义不带单词var
b会自动创建一个全局变量?
省略var
一词,谁能解释规则?
function foo(a) {
console.log( a + b );
b = a;
}
foo( 2 );
在函数中不使用var
进行变量声明确实会使它成为全局变量,但是在您的情况下,JavaScript引擎出现了这一行:
console.log( a + b );
在到达此行之前:
b = a;
并且,这是(全局)声明它的行。
而且,因为你没有使用var
,该声明没有提升到代码库(它本来具有的顶部var
-你仍然不会得到一个值b
因为只有声明将被吊起,不初始化,但不会引发错误),因此您会遇到错误。
在此处查看有关var
和吊装的更多信息。
在严格模式下:
在非严格模式下:
var
声明变量会创建一个局部变量,并将其提升到函数顶部 由于您未处于严格模式下,并且在尝试为其分配值之前先读取b
,因此会出现异常。
遵循准则:
"use strict"
像这样用var
关键字声明的变量一样,不会悬挂以此方式声明的b = a
变量。 这意味着,在运行时,编译器读取b的值不是未定义的(就像var b = a
),而是完全不存在的值,从而抛出ReferenceError。
吊装信息: https : //developer.mozilla.org/en-US/docs/Glossary/Hoisting
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.