为什么它返回"未定义"而不是1

mes*_*ssi 2 javascript

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

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

xRe*_*eQz 5

当您使用.运算符调用函数时,左侧的对象将.成为调用的上下文,即this.但是当你将你的函数作为参数传递给另一个函数时,你会丢失上下文,因为你直接调用它.如果要保留可以使用的上下文bind.

(function(){
    return typeof arguments[0]();
})(foo.bar.bind(foo));
Run Code Online (Sandbox Code Playgroud)

而且,是的,你的函数实际上返回的是类型baz,而不是值本身.typeof如果你想看,删除1.