2014-10-01 72 views
0

我想通过试用我的控制台和plunker来看到隐含的全局变量是如何工作的。隐含的全局变量和全局对象

我创建一个自调用函数,

(function() { 
    toto = 1; 
})(); 

按照书我读,

... implied globals are technically not real variables, but they are properties of the global object.

我想看看这个函数调用后,我可以作为全局对象的属性来访问toto - 在浏览器中,它是window

当我使用hasOwnProperty('toto')(通过直接在控制台中输入),我得到了错误。 我想我会使用in,事实上,toto是“在”窗口(所以,它不是在窗口本身,而是它的一个子对象)

你能说一些吗? 任何想法如何使用Chrome Web Tools来检查在任何给定时间声明的所有变量的状态?

+3

无法重现:http://jsfiddle.net/tbn2mzar/显示为“true”。 – JJJ 2014-10-01 19:58:08

+0

我在Chrome控制台中尝试了这一点,并在窗口和window.hasOwnProperty(“toto”)''返回'true'中都“toto”。你能否给我们更多关于如何重现这种行为的指示? – 2014-10-01 20:01:12

+0

好吧,这很有趣。当你试图从控制台窗口直接得到这个值,你会得到错误..这很奇怪吗? – 2014-10-01 20:01:22

回答

0

您可能正在从控制台运行hasOwnProperty,并且您选择了错误的帧。

我在构成plunker网站的所有框架中运行了hasOwnProperty命令,并且在某些框架中我同时得到了true和false两个toto甚至没有初始化(ReferenceError:toto未定义)。

+0

有没有更安全/更有效的方式来查看这些东西没有console.logging? – 2014-10-01 20:21:32

+0

您可以检查全局对象在执行前后的属性,然后对其进行区分 - http://jsfiddle.net/d4rjxocb/ – 2014-10-01 21:00:00