【发布时间】:2013-07-07 16:10:46
【问题描述】:
谁能解释一下下面代码的作用域绑定
window.name = "window";
object = {
name: "object",
method: function() {
nestedMethod: function() {
console.log(this.name);
}
nestedMethod();
}
}
object.method(); // print 'window'
我认为我的问题更多是关于this...为什么this 会失去作用域并默认为全局作用域?我们创建的所有匿名函数都会在全局范围内运行吗?
【问题讨论】:
-
你可以尝试使用对象的名称,所以
object.name。 -
没有。默认情况下,所有函数都在全局范围内,除非作为属性绑定到对象...
-
@dandavis 这真的不准确。函数本质上根本不会“继续”任何范围。
this的值由每次调用函数的情况决定。 -
当我在 node.js 中尝试它时,它会为我打印
"object"(一旦我在分配给object之后放置了;)。 -
nestedMethod: function() {看起来像一个标签,而不是变量或函数名。无论如何,learn aboutthisfrom the MDN documentation.
标签: javascript binding scope