Узел - это движок JavaScript, а не браузер. Конкретная причина, по которой вы видите undefined
в узле и Lulu
в браузере? Различия в глобальном пространстве имен :
В браузерах область верхнего уровня - это глобальная область. Это означает, что в браузерах, если вы находитесь в глобальной области видимости, var something
будет определять глобальную переменную. В Node все по-другому. Область верхнего уровня не является глобальной областью; var something
внутри модуля Node будет локальным для этого модуля.
В браузере this
является ссылкой на объект window
- глобальное пространство имен браузера - для всех функций, которые вызываются не привязанными к объекту (например, , а не , как foo.bar()
). В Node this
просто не является ссылкой на глобальное пространство имен.
N.B. console.log(this.name)
в интерпретаторе Node напечатает Lulu
, а не undefined
. Это потому, что только в REPL,
> this === global
true
Дальнейшее чтение @ Как Узлу: Что такое "это?"
Хорошо, еще одно редактирование в соответствии с комментарием @ Šime Vidas * относительно this
в ES5 строгом режиме :
- В глобальном контексте (вне какой-либо функции)
this
относится к глобальному объекту, в строгом режиме или нет.
- Когда ключевое слово
this
встречается внутри функции, его значение зависит от способа вызова функции .
- Когда функция вызывается как метод объекта, ее
this
устанавливается на объект, к которому вызывается метод.
Более интересное чтение любезно предоставлено Юрий Зайцев (он же @kangax) в одном из его постов в блоге .