2013-03-02 101 views
1

我從「JavaScript Enlightement」一書中拿下了下面的代碼。該代碼表示​​前兩個語句返回true,但是當我在JSFiddle中運行代碼時,第一行返回「false」(用var關鍵字定義的變量)。這裏是代碼:Javascript「head」object scope

<!DOCTYPE html><html lang="en"><body><script> 
var myStringVar = 'myString'; 
var myFunctionVar = function() {}; 
myString = 'myString'; 
myFunction = function() {}; 
console.log('myStringVar' in window); // returns true 
console.log('myFunctionVar' in window); // return true 
console.log('myString' in window); // returns true 
console.log('myFunction' in window); // return true 
</script></body></html> 

有人可以解釋這裏發生了什麼?

+1

當問一個關於jsfiddle的問題時,提供一個鏈接到小提琴將是有禮貌的... – JJJ 2013-03-02 10:57:32

+0

你可能會發現這個有趣的http://jsfiddle.net/V2uEb/1/如果你在本地嘗試這個結果將是不同。 – Bakudan 2013-03-02 11:10:06

+0

@Juhana我的問題不直接關於JSFiddle,但我明白了你的觀點。 – 2013-03-02 11:22:23

回答

0

在jsFiddle中,您的代碼是嵌入式的,不會直接在window中運行,而是在加載頁面時調用的回調函數中。

如果要測試這些情況,則必須在標準頁面中運行代碼或在左側面板的第二個菜單中選擇"no wrap"選項之一。

+0

或者只需從左上​​角的第二個下拉列表中選擇「無包裝」選項即可。 http://jsfiddle.net/zEBm6/ – JJJ 2013-03-02 10:56:53

+0

@Juhana感謝您的提示。 – 2013-03-02 11:22:43