簡體   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