2013-03-02 74 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