[英]why its returning the “undefined” instead of 1
我是javascript新手,根据我对javascript的了解,以下问题应返回1,但返回的是“ undefined”。 谁能告诉我为什么它不返回1?
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
当您使用调用函数时.
运算符,然后是左侧的对象.
成为调用的上下文,也就是this
。 但是,当您将函数作为参数传递给另一个函数时,会丢失上下文,因为您直接调用它。 如果要保留上下文,可以使用bind
。
(function(){
return typeof arguments[0]();
})(foo.bar.bind(foo));
而且,是的,您的函数实际上返回baz
的类型,而不是值本身。 删除typeof
如果你想看到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
的值,请查看上面的链接以及如何在回调中访问正确的`this`上下文? 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.