为什么下面的JS代码打印'未定义'?有人可以解释一下JS是如何运作的吗?
var regular = 'regular is assigned';
function prison() {
console.log(regular);
var regular;
}
prison();
谢谢!
答案 0 :(得分:2)
这是一个范围问题。
在您的函数内部,您声明了创建的新范围。
Javascript将变量decleration提升到top函数。由于变量没有值,因此它是undefined
。
在窗口中创建的regular
变量在函数的范围内不存在。
答案 1 :(得分:1)
var regular = 'regular is assigned';
function prison() {
console.log(regular);
//var regular;
}
prison();
原因是已注释掉的关键字。
Javascript在执行任何代码之前将所有变量移到顶部。
在您的情况下,打印局部变量regular
而不是首先声明regular
变量.. Documentation
所以你的代码执行如下
var regular = 'regular is assigned';
function prison() {
var regular;//Moved here as per JS Scope
console.log(regular);//Hence it is undefined
}
prison();
答案 2 :(得分:1)
您的函数重新定义变量。它低于console.log
调用并不重要 - 它总是被重新定义为完整范围。
答案 3 :(得分:1)
你所看到的是悬挂。即使您在使用它之后声明了变量,变量声明也会移动到函数的顶部。正如您所期望的那样,局部变量会覆盖全局变量,因此它未定义。
采用以下示例:
<div class="appearingitem" ng-show="timeduration"></div>
调用函数后function hoist(num){
message = "I'm not five"
if(num === 5)
{
var message = "I am five";
}
console.log(message);
}
hoist(5);
console.log(message);
会抛出异常。如果没有提升,conosle.log
变量的第一个赋值将创建一个全局变量,但它不会。变量声明被移动到顶部,使得对消息的赋值发生在局部变量上,而不是创建全局变量。