【发布时间】:2011-07-22 21:54:19
【问题描述】:
我有这样的代码:
function demo() {
this.val=5;
function() {
this.val=7;
}();
}
现在,当我在 firefox 或 chrome 控制台中执行此代码时,它会出现语法错误。我不明白为什么这是一个错误,因为我已经读过 javascript 函数是对象,所以当我调用匿名函数时,其中的 this 指向函数演示,应该将 val 更改为 7,所以如果我愿意
var x=new demo();
x.val; //should give 7
但是当我这样做时
function demo() {
this.val=5;
var f=function() {
this.val=7;
}();
}
window.val; // gives 7
我不明白函数是否是对象,那么为什么匿名函数中的this 指向window 而不是demo。
请解释一下。
【问题讨论】:
-
这就是它的工作方式。如果您“正常”调用函数,
this关键字将指向全局对象... -
@Šime Vidas 这里的“通常”是什么?函数不是对象吗?
-
"normally" = 通过将括号附加到函数名称,例如:
foo()。调用函数的其他方式是(1)像构造函数和(2)通过call/apply。在这些情况下,this关键字的规则是不同的。是的,函数就是对象。
标签: javascript this anonymous-function