我当时正在理解闭包,并尝试做一些实验,那时候我遇到了这个问题。
当我执行以下代码时:
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,但它返回未定义的值。
感谢您的帮助。
答案 0 :(得分:3)
这是因为功能测试中的变量hello是hoisted,这意味着:
function test() {
console.log(hello);
var hello = 'xyz';
}
实际上与:
相同function test() {
var hello;
console.log(hello);
hello = 'xyz';
}