我知道功能范围,自动执行功能,提升和其他很酷的词,但我完全是以下为基础。
var o = {
a : 1,
f : (function(){
console.log(this.a);
})()
};
为什么这会给我undefined
?当对象初始化时,函数是自行执行的,因此我希望它已经指定为1.但是它没有这样做。
答案 0 :(得分:3)
该函数不是在新创建的对象的范围内调用,而是在全局范围内调用。在那里,a
(或window.a
)确实是undefined
。大括号本身不会创建新块。只有在您稍后调用某个方法时,this
才会被假设为o
。与此相比:
var o = {
a : 1,
f : function(){
console.log(this.a);
}
};
o.f(); // console prints 1
答案 1 :(得分:2)
由于您未通过o
进行调用,因此this
不是o
。
此外,您永远不会将该功能赋予任何功能 - f
设置为返回值(undefined
)。