0
在下面的代碼片段中,爲什麼window.foo存在,但this.bar是未定義的?JavaScript對象上下文和函數
function foo() {
function bar() { };
console.log(this.bar);
}
console.log(window.foo);
foo.call({});
在下面的代碼片段中,爲什麼window.foo存在,但this.bar是未定義的?JavaScript對象上下文和函數
function foo() {
function bar() { };
console.log(this.bar);
}
console.log(window.foo);
foo.call({});
在瀏覽器窗口是一個全局對象,所以除非它的陰影無處不在的可用。 this
只是指向一個被稱爲方法的函數體中有用的東西;在foo.bar()中 - 其中bar
,this
是foo
,或者在調用bar.call(...)或bar.apply(...)時使用參數this
或者當您在函數之外完全調用它指向全局對象(窗口)的位置。
你明確地做了foo.call({}),它將其設置爲一個空的Object。因此在調用期間this.bar不存在。
因爲JavaScript中的'this'與變量作用域無關。這是一個基於函數如何被調用而設置的動態值。例外是全局環境,其中'this'是指全局'window'對象,它也包含全局變量。 – 2013-05-07 18:12:22
'this'正在尋找'bar'方法或'global'對象,它將是'window'。在'global'對象中'bar'是未定義的。 – Sethen 2013-05-07 18:20:47
什麼是最令我困惑的是,window.foo存在。爲什麼發生在全球範圍內,而不是在每個兒童範圍內? – 2013-05-07 18:21:07