В браузере глобальная область действия относится к объекту window
, который имеет свойство name
.
Если вы читали о обзорного в JavaScript, например, в W3Schools, вы найдете эту информацию (в нижней части страницы):
Your global variables (or functions) can overwrite window variables (or functions). Any function, including the window object, can overwrite your global variables and functions.
Это означает, что, если попытаться определить любую переменную или функции, которая уже существует как член глобального объекта window
, вы не сможете это сделать. Когда вы попытаетесь получить к ним доступ, вы получите доступ к глобальному объекту window
.
Вы можете проверить, что после создания вашего объекта name === window.name
дает значение true, а это значит, что это не ваш объект, а свойство window.name
.
Вы также можете проверить, что всякий раз, когда вы создаете var в глобальной области, он создается как член окна. т.е.
var x = 22;
window.hasOwnProperty('x'); // returns true
console.log(window.x); // you'll see 22 in your console
Чтобы избавиться от этой проблемы, вам необходимо свернуть вашу переменную. JavaScript только создает новые области в телах функций. Таким образом, один из способов, чтобы создать свой собственный объем его использовать «само выполнение анонимной функции» шаблон, который выглядит следующим образом:
(function(){
/* new scope: variables are created here without window global object
* interference. You can still access globlas using window.globalName */
})();
Вы можете прочитать интересную статью по этому образцу here.
В узле.js в глобальном масштабе нет name
, поэтому у вас нет этой проблемы. Существует большое объяснение того, что находится в глобальной области node.js в this great SO answer.