所以我在玩
JavaScript,遇到了一些我觉得很奇怪的事情.有人能解释以下内容吗? (我已经将提醒值列为注释)
为什么foo()中的第一个警报(msg)返回未定义而不在外部?
var msg = 'outside'; function foo() { alert(msg); // undefined var msg = 'inside'; alert(msg); // inside } foo(); alert(msg); // outside
考虑到这两个工作正常:
var msg = 'outside'; function foo() { alert(msg); // outside } alert(msg); // outside
和:
var msg = 'outside'; function foo() { var msg = 'inside'; alert(msg); // inside } alert(msg); // outside
解决方法
在第一个例子中发生了什么是msg的声明和初始化正在被分解,声明被提升到关闭的顶部.
var msg; //declaration msg = "inside" //initialization
因此,您编写的代码与之相同
var msg = 'outside'; function foo() { var msg; alert(msg); // undefined msg = 'inside'; alert(msg); // inside }
第二个例子是不一样的.在你的第二个例子中,你没有声明一个本地变量msg,所以alert(msg)指的是全局msg.
这里有一些进一步的阅读:
Hoisting