2013-05-07 79 views
0

在下面的代碼片段中,爲什麼window.foo存在,但this.bar是未定義的?JavaScript對象上下文和函數

function foo() { 
    function bar() { }; 
    console.log(this.bar); 
} 

console.log(window.foo); 
foo.call({}); 
+1

因爲JavaScript中的'this'與變量作用域無關。這是一個基於函數如何被調用而設置的動態值。例外是全局環境,其中'this'是指全局'window'對象,它也包含全局變量。 – 2013-05-07 18:12:22

+0

'this'正在尋找'bar'方法或'global'對象,它將是'window'。在'global'對象中'bar'是未定義的。 – Sethen 2013-05-07 18:20:47

+0

什麼是最令我困惑的是,window.foo存在。爲什麼發生在全球範圍內,而不是在每個兒童範圍內? – 2013-05-07 18:21:07

回答

-1

在瀏覽器窗口是一個全局對象,所以除非它的陰影無處不在的可用。 this只是指向一個被稱爲方法的函數體中有用的東西;在foo.bar()中 - 其中bar,thisfoo,或者在調用bar.call(...)或bar.apply(...)時使用參數this或者當您在函數之外完全調用它指向全局對象(窗口)的位置。

你明確地做了foo.call({}),它將其設置爲一個空的Object。因此在調用期間this.bar不存在。