我是javascript的新手,下面的问题应该根据我对javascript的了解返回1,但它返回" undefined"。 谁能告诉我为什么它不会返回1?
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
答案 0 :(得分:5)
当您使用/
运算符调用函数时,.
左侧的对象将成为调用的上下文,即.
。但是当你将你的函数作为参数传递给另一个函数时,你会丢失上下文,因为你直接调用它。如果要保留上下文,可以使用this
。
bind
而且,是的,您的函数实际上返回(function(){
return typeof arguments[0]();
})(foo.bar.bind(foo));
的类型,而不是值本身。如果您想查看baz
,请移除typeof
。
答案 1 :(得分:1)
为什么它返回“undefined”而不是1
由于您调用该函数的方式,this
内的foo.bar
引用了全局对象(即window
)。没有全局变量baz
因此this.baz
(window.baz
)是undefined
。
详细了解this
如何在此处运作:
此外,它永远不会返回1
,因为typeof
会返回值的类型。 1
不是一种类型。最好它会返回"number"
:
console.log(typeof 1);
console.log(typeof undefined);

要了解如何控制this
的值,请查看上面的链接以及How to access the correct `this` context inside a callback?。