【发布时间】:2018-07-09 07:52:14
【问题描述】:
我正在理解闭包并尝试做一些实验,就在那时我遇到了这个问题。
当我执行如下代码时:
var hello;
hello = 'abc';
test();
function test() {
console.log(hello);
}
输出: 'abc'
现在如果我在函数中添加另一个变量声明,那么输出就会不同
var hello;
hello = 'abc';
test();
function test() {
console.log(hello);
var hello = 'xyz';
}
输出:未定义
我无法找出它为什么会这样。执行 test() 函数时,它会记录变量“hello”,直到现在 test() 函数中的变量声明未执行,所以它应该给我全局 hello 变量 val 但它返回未定义。
感谢您帮助我。
【问题讨论】:
-
你应该看看
Javascript hoisting做了什么。 -
变量声明(
var hello)部分被提升到函数的顶部,但= 'xyz'的定义只发生在它们被写入的地方。因此,您的函数将获得一个未定义但已声明的hello变量,直到您定义它以掩盖函数外部的变量。一开始有点奇怪。 -
您可以将您的问题限制为两行代码:
console.log(data); var data = "data";,然后您的问题将与许多其他问题重复 -
@Adelin 您享有将其作为重复投票的声誉。如果您知道有这么多重复,您应该考虑提供帮助并发布它。
标签: javascript closures frontend