2013-05-18 8 views
2

Я хочу установить глобальную переменную с помощью функции множества, но он всегда устанавливает его значение undefined:JS - установить глобальную переменную

var name; 
var setName = function(name){ 
    this.name = name; 
} 
+1

Try window.name – house9

+1

'window.name' является предопределенное свойство, которое может быть недоступно для записи. Или используйте другое имя переменной или лучше, избегайте глобальных переменных. Кроме того, работает ли 'this.name', зависит от того, как вы вызываете' setName'. –

+0

Действительно ли вы передаете переменную в функцию или ожидаете, что функция автоматически заполнит параметр 'name'/argument с переменной' name', определенной ранее? –

ответ

3

В этом случае вы не используете this. (Это может работать, но не обязательно Почему Читайте this.?)

Просто используйте:

var name; 
var setName = function (aname) { 
    name = aname; 
} 

Также убедитесь, что этот код не внутри другой области (функции):

function foo() { 
    // ... 
    var name; 
    var setName = function (aname) { 
     name = aname; 
    } 
    // ... 
} 

В этом случае имя будет не быть глобальным, и вам придется пропустить его декларацию, чтобы сделать его глобальным:

function foo() { 
    // ... 
    var setName = function (aname) { 
     name = aname; // not it is global, if not defined in the visible scope 
    } 
    // ... 
} 

Но это плохой практики, поэтому старайтесь избегать загрязнения global namespace. Переменная считается в глобальной имен, если:

  • имеет нет var (name = ..., и нет других видимых локальных переменных называется name
  • он установлен на window (например window.name = ...)
+0

спасибо, я использовал global, чтобы выразить, что он находится вне функции set, я исхожу из Java. Обычно я использовал this.name = name для установки переменной intance в Java. – daisy

+0

Несмотря на то, что javascript имеет «java» в начале, javascript не имеет ничего общего с java. Ничего. – 7stud

1

Во-первых, window.name - это зарезервированное свойство, и вы не должны его использовать.

Во-вторых, это хороший идентификатор ea, чтобы пропустить любой глобальный JavaScript, чтобы избежать таких проблем или конфликтов с сторонними библиотеками.

Вот рабочий пример:

window.MyNamespace = {}; 
MyNamespace.name = ''; 
MyNamespace.setName = function(value) { 
    MyNamespace.name = value; 
}; 
MyNamespace.setName('hello'); 
MyNamespace.name; // "hello" 

Основываясь на ваш комментарий об этом существе в модуле, этот код будет работать:

(function(){ 
    app = {}; 
    app.myPerson = (function(){ 
     var name; 
     var setName = function(value) { 
      name = value; 
     };  
     setName('Charlie'); 
     console.log(name); // Charlie 
    })();   
})(); 
+0

Извините, что я использовал global, чтобы выразить, что он вне функции set, я исхожу из Java. Обычно я использовал this.name = name для установки переменной intance в Java. – daisy

+0

Предполагается, что ваш метод setName должен быть определен в объекте JavaScript? –

+0

внутри модуля: (function() {app.myPerson = (function() {var name;})();})(); – daisy

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