繁体   English   中英

为什么它返回的是“ undefined”而不是1

[英]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.bazwindow.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM