在JavaScript的jQuery的教程(http://learn.jquery.com/javascript-101/scope/)在有關範圍下面的例子:的Javascript:前局部變量使用全局變量,使用(從jQuery的JavaScript的教程例子)
var myFunction = function() {
var foo = "hello";
var myFn = function() {
console.log(foo);
};
foo = "world"; // line x
return myFn;
};
var f = myFunction();
f(); // "world"
現在,我不知道爲什麼輸出是世界而不是你好。變量foo局部綁定在myFunction內。然後在myFn,foo被訪問。我會說評估應該在範圍內,這將在myFn內聲明,然後在內聲明myFunction,最後一個應該是全局變量。
那麼爲什麼是全局變量輸出,即使myFunction裏面的定義距離範圍較小?
如果我刪除標記爲行x的行,則會按預期輸出局部變量。
'myFn'只保留'foo'對象的引用,不創建它的副本。 – Catalin
含義*行x *實際上是改變myFunction的局部變量,對吧? –
原型鏈不進入此代碼示例。關於這一點沒有涉及原型。我認爲你把「範圍」和封閉與「原型」混爲一談。 – meagar