2016-03-18 44 views
-1

全局变量可以在大多数时间在“全局”或“窗口”中找到。 https://stackoverflow.com/a/19305414/4808079Javascript:全局变量转到“窗口”或“全局”,但全局函数不变。全球fns走向何方?

但是全局函数并不存在。

var globals = window || global 

hat = "fez" 

alert(globals["hat"]) // alert --> "fez" 

function test() { 
    alert("yay") 
} 

alert(globals["test"]) // alert --> "undefined" 

globals["test"]() // console --> "Uncaught TypeError: globals.test is not a function" 

https://jsfiddle.net/yz4c62xg/2/

那么,就全局函数去了?他们可以像全球变量一样被访问或枚举吗?

+0

我对IE11和Chrome上的代码没有问题。 –

+0

测试函数不返回任何东西。你正在寻找'globals [“test”]''''globals [“test”]()''。 –

+0

我很确定我正在寻找名为test的全局函数。 –

回答

1

你在做错事。
test不是global的财产,所以你不能访问它作为global.test
声明的函数在global scope中,但不作为属性。
无论如何,你可以创建一个闭包,如:
testclosure = testglobal.testclosure = test ,然后访问它像属性(但建立全球范围内的变量不建议这样做,并在严格模式下愉快地禁止)

+0

我更怀疑是否是任何*对象的属性,而不是如何访问。谢谢你。 –

+1

这与闭包有什么关系? *声明的函数在全局范围内,而不是属性。*是什么意思? –

+0

我的意思是:函数在这里是一个变量,但不是任何对象的属性。 – loadaverage

0

您的代码将在浏览器中正常工作。

但是,在节点中,变量/函数不放在global对象上,它们位于模块范围内。见https://nodejs.org/api/globals.html#globals_global

顶级范围不是全局范围; Node.js模块中的var something将在该模块的本地。

+0

该代码在浏览器中不起作用。 –

+0

https://jsfiddle.net/yz4c62xg/2/ –

+0

工作正常,请参阅https://jsfiddle.net/j8hk6twr/。 –