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