18 javascript
这是我在javascript中学习范围时发现的有趣内容.
码
var foo = "This is a global variable.";
var bar = function() {
alert(foo);
foo = "Value has been modified";
}
bar();
alert(foo);
Run Code Online (Sandbox Code Playgroud)
这给出了您认为可以获得的正常响应,但如果我更改了这一行:
从:
foo = "Value has been modified";
Run Code Online (Sandbox Code Playgroud)
至:
var foo = "Value has been modified";
Run Code Online (Sandbox Code Playgroud)
我为foo得到了一个未定义的值,为什么会这样?既然函数是全局范围的,那它怎么不接受前面的var关键字呢?
编辑
现在我基本了解var foo功能栏中发生的事情,因为var关键字并且被提升,它将获得最大的重要性,但它将在没有分配值的情况下被提升.
Qan*_*avy 13
在一份var声明中,它有两个部分 - 实际声明:
var foo //;
Run Code Online (Sandbox Code Playgroud)
......和分配,这是可选的:
= 1234567890;
Run Code Online (Sandbox Code Playgroud)
如果没有对其进行分配,则变量(如果尚未定义)默认为undefined.
该变量声明部分移动到当前范围(该功能的开始)的顶部,而不是实际的分配(因此它等同于以下):
var foo = "This is a global variable.";
var bar = function() {
var foo; // undefined
alert(foo); // yes, it's undefined
foo = "Value has been modified"; // modify local, not global
}
bar();
alert(foo); // the global one
Run Code Online (Sandbox Code Playgroud)
函数创建自己的范围 - 例如:
var test = function ()
{ var bar = 1;
console.log(bar); // 1
};
test();
console.log(bar); // ReferenceError: bar is not defined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |