2016-03-18 86 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/。 –