2016-03-18 2 views
-1

Глобальные переменные можно найти в «глобальном» или «окне» в большинстве случаев. https://stackoverflow.com/a/19305414/4808079Javascript: глобальные vars переходят к «окну» или «глобальному», но глобальные функции этого не делают. Куда идут глобальные 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 "]' not 'globals [" test "]()'. –

+0

Я уверен, что ищу глобальную функцию test. –

ответ

1

Вы делаете что-то неправильно.
test не является собственностью global, так что вы не можете получить к нему доступ как global.test.
Заявленные функции находятся в global scope, но не как собственность.
Во всяком случае, вы можете создать закрытие, как:
testclosure = test или global.testclosure = test , а затем получить доступ к нему как к собственности (но создание переменных в глобальном масштабе это не рекомендуется, и счастливо запрещено в строгом режиме)

+0

Мне больше интересно, является ли свойство * any * объектом, чем доступ к нему. Однако, спасибо. –

+1

Что это связано с закрытием? Что означает * Объявленные функции в глобальном масштабе, но не как свойство. * Означает? –

+0

Я имею в виду: здесь функция является переменной, но не является свойством какого-либо объекта. – loadaverage

0

Ваш код будет отлично работайте в браузере.

В узле, однако, переменные/функции не помещаются на объект global, они находятся в области модуля. См. https://nodejs.org/api/globals.html#globals_global.

Объем верхнего уровня не является глобальным охватом; var something внутри модуля Node.js будет локальным для этого модуля.

+0

Код не работает в браузере. –

+0

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

+0

Прекрасно работает, см. Https://jsfiddle.net/j8hk6twr/. –

Смежные вопросы