所以我正在玩JavaScript并遇到了我认为奇怪的事情.有人能够解释以下内容吗?(我已将警报值包含在评论中)
为什么foo()内的第一个警报(msg)返回undefined而不是外部?
var msg = 'outside';
function foo() {
alert(msg); // undefined
var msg = 'inside';
alert(msg); // inside
}
foo();
alert(msg); // outside
Run Code Online (Sandbox Code Playgroud)
考虑到这些都很好:
var msg = 'outside';
function foo() {
alert(msg); // outside
}
alert(msg); // outside
Run Code Online (Sandbox Code Playgroud)
和:
var msg = 'outside';
function foo() {
var msg = 'inside';
alert(msg); // inside
}
alert(msg); // outside
Run Code Online (Sandbox Code Playgroud)
Sha*_*nau 17
你的第一个例子中发生的事情是msg的声明和初始化被拆分,声明被提升到闭包的顶部.
var msg; //declaration
msg = "inside" //initialization
Run Code Online (Sandbox Code Playgroud)
因此,您编写的代码与之相同
var msg = 'outside';
function foo() {
var msg;
alert(msg); // undefined
msg = 'inside';
alert(msg); // inside
}
Run Code Online (Sandbox Code Playgroud)
第二个例子不一样.在第二个示例中,您尚未声明本地变量msg,因此alert(msg)引用全局消息.这里有一些进一步的阅读: 吊装
| 归档时间: |
|
| 查看次数: |
7127 次 |
| 最近记录: |