这里发生了什么事?如果console.log
在内部函数中声明一个变量,则会得到不同的结果
我知道var具有功能范围,内部函数可以从其父级访问变量
function outer() {
var a = 2;
function inner() {
a++;
console.log(a) //log NaN
var a = 8
}
inner()
}
outer()
function outer() {
var a = 2;
function inner() {
a++;
console.log(a) //log 3
var b = 8
}
inner()
}
outer()
NaN
在第一个示例中返回日志3
,在第二个示例中返回日志
这是由于吊装
的声明a
在内部功能被提升到函数的顶部,覆盖外部函数的a
,所以a
是undefined
undefined++
返回NaN
,因此您的结果。
您的代码等效于:
function outer() {
var a=2;
function inner() {
var a;
a++;
console.log(a); //log NaN
a = 8;
}
inner();
}
outer();
通过这种方式重写代码,可以轻松查看正在发生的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句