var foo = 'bar';
console.log(window.foo); // bar
Run Code Online (Sandbox Code Playgroud)
似乎变量被赋值为属性this,但在匿名函数内部,this是指父作用域,但不将变量赋给父作用域.
function() {
var foo = 'bar';
}();
window.foo; // undefined
Run Code Online (Sandbox Code Playgroud)
变量在非全局范围内分配给什么对象?
引用http://perfectionkills.com/understanding-delete/#execution_context:
每个执行上下文都有一个所谓的
Variable Object关联它.与执行上下文类似,Variable对象是一个抽象实体,一种描述变量实例化的机制.现在,有趣的部分是在源文本中声明的变量和函数实际上被添加为此Variable对象的属性.当控制进入全局代码的执行上下文时,a
Global object用作aVariable object.这正是全局声明的变量或函数成为a的属性的原因Global object
然而,这些Variable Object是无法访问的.唯一的非内部对象是全局对象,window或this(在全局上下文中).
规范中的相关部分是#10:可执行代码和执行上下文.