为什么它回归" undefined"而不是1

时间:2017-06-22 07:17:45

标签: javascript

我是javascript的新手,下面的问题应该根据我对javascript的了解返回1,但它返回" undefined"。 谁能告诉我为什么它不会返回1?

 var foo = {
    bar: function() { return this.baz; },
    baz: 1
  };
  (function(){
    return typeof arguments[0]();
  })(foo.bar);

2 个答案:

答案 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.bazwindow.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?