为什么这个函数产生 'undefined'?
Why is this function yielding 'undefined'?
这是我遇到的一个非常令人困惑的行为,我无法弄清楚:
var foo = 'outside';
function logIt(){
console.log(foo);
var foo = 'inside';
}
logIt();
这将产生 undefined。这对我来说已经无法解释了。但奇怪的是,这个 :
var foo = 'outside';
function logIt(){
console.log(foo);
}
logIt();
实际上会产生 外部。
为什么会这样?
Because variable declarations (and declarations in general) are
processed before any code is executed, declaring a variable anywhere
in the code is equivalent to declaring it at the top.
因此您的代码等同于:
var foo = 'outside';
function logIt(){
var foo;
console.log(foo);
foo = 'inside';
}
logIt();
并且在调用 console.log
时,foo 是 undefined
.
这与 Javascript 中的提升变量有关。
var foo = 'outside';
function logIt(){
console.log(foo);
var foo = 'inside';
}
logIt();
内部将变为:
var foo = 'outside';
function logIt(){
var foo;
console.log(foo);
foo = 'inside';
}
logIt();
因此,foo 将在 console.log 中 undefined
:-)
您正在 hoisting javascript
当你这样写的时候:
var foo = 'outside';
function logIt(){
console.log(foo);
var foo = 'inside';
}
logIt();
javascript 将这样解释代码:
var foo = 'outside';
function logIt(){
var foo; //undefined
console.log(foo);
foo = 'inside';
}
logIt();
logIt()
里面的foo
在console.log(foo)
之前被声明为undefined
,这就是它未定义的原因。
在第二个示例中,console.log(foo)
在您声明全局 var foo = 'outside'
之后运行,这就是它打印 outside
.
的原因
正如其他人正确提到的那样,这是因为吊装。
提升是(对许多开发人员而言)JavaScript 的未知或被忽视的行为。
如果开发人员不了解提升,程序可能会包含错误(错误)。
为避免错误,请始终在每个作用域的开头声明所有变量。
所以在你的例子中它应该是这样的:
function logIt(){
foo = 'inside';
console.log(foo);
}
logIt();
预期结果。
这是我遇到的一个非常令人困惑的行为,我无法弄清楚:
var foo = 'outside';
function logIt(){
console.log(foo);
var foo = 'inside';
}
logIt();
这将产生 undefined。这对我来说已经无法解释了。但奇怪的是,这个 :
var foo = 'outside';
function logIt(){
console.log(foo);
}
logIt();
实际上会产生 外部。
为什么会这样?
Because variable declarations (and declarations in general) are processed before any code is executed, declaring a variable anywhere in the code is equivalent to declaring it at the top.
因此您的代码等同于:
var foo = 'outside';
function logIt(){
var foo;
console.log(foo);
foo = 'inside';
}
logIt();
并且在调用 console.log
时,foo 是 undefined
.
这与 Javascript 中的提升变量有关。
var foo = 'outside';
function logIt(){
console.log(foo);
var foo = 'inside';
}
logIt();
内部将变为:
var foo = 'outside';
function logIt(){
var foo;
console.log(foo);
foo = 'inside';
}
logIt();
因此,foo 将在 console.log 中 undefined
:-)
您正在 hoisting javascript
当你这样写的时候:
var foo = 'outside';
function logIt(){
console.log(foo);
var foo = 'inside';
}
logIt();
javascript 将这样解释代码:
var foo = 'outside';
function logIt(){
var foo; //undefined
console.log(foo);
foo = 'inside';
}
logIt();
logIt()
里面的foo
在console.log(foo)
之前被声明为undefined
,这就是它未定义的原因。
在第二个示例中,console.log(foo)
在您声明全局 var foo = 'outside'
之后运行,这就是它打印 outside
.
正如其他人正确提到的那样,这是因为吊装。
提升是(对许多开发人员而言)JavaScript 的未知或被忽视的行为。 如果开发人员不了解提升,程序可能会包含错误(错误)。 为避免错误,请始终在每个作用域的开头声明所有变量。
所以在你的例子中它应该是这样的:
function logIt(){
foo = 'inside';
console.log(foo);
}
logIt();
预期结果。