在使用逻辑OR声明对象时,我会遇到奇怪的行为.
my_var = my_var || {}; // throws TypeError
Run Code Online (Sandbox Code Playgroud)
如果我添加var关键字
var my_var = my_var || {}; // returns empty object
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我似乎无法找到解释.my_var是全球范围的,那么为什么要var改变这种行为呢?
第一个示例尝试my_var通过从名为my_var(或空对象)的标识符中读取值来为全局对象上的属性分配.但是,标识符my_var未在该点定义,因此失败.
在第二个例子中,由于javascript变量提升的工作原理my_var,当你通过赋值变量读取变量时,变量已经被声明了.
另请看这个例子:
a = a; // fails, undeclared identifier
a = 0;
Run Code Online (Sandbox Code Playgroud)
使用var关键字,它将起作用!
b = b; // succeeds allthough identifier undeclared?!
var b = 0;
Run Code Online (Sandbox Code Playgroud)
这是因为可变提升将把它变成这样:
var b; // declaration of b hoisted to the top of scope
b = b;
b = 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |