Я хочу установить глобальную переменную с помощью функции множества, но он всегда устанавливает его значение undefined
:JS - установить глобальную переменную
var name;
var setName = function(name){
this.name = name;
}
Я хочу установить глобальную переменную с помощью функции множества, но он всегда устанавливает его значение undefined
:JS - установить глобальную переменную
var name;
var setName = function(name){
this.name = name;
}
В этом случае вы не используете 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 = ...
)спасибо, я использовал global, чтобы выразить, что он находится вне функции set, я исхожу из Java. Обычно я использовал this.name = name для установки переменной intance в Java. – daisy
Несмотря на то, что javascript имеет «java» в начале, javascript не имеет ничего общего с java. Ничего. – 7stud
function(val){
name = val
........... ............
Во-первых, 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
})();
})();
Извините, что я использовал global, чтобы выразить, что он вне функции set, я исхожу из Java. Обычно я использовал this.name = name для установки переменной intance в Java. – daisy
Предполагается, что ваш метод setName должен быть определен в объекте JavaScript? –
внутри модуля: (function() {app.myPerson = (function() {var name;})();})(); – daisy
Try window.name – house9
'window.name' является предопределенное свойство, которое может быть недоступно для записи. Или используйте другое имя переменной или лучше, избегайте глобальных переменных. Кроме того, работает ли 'this.name', зависит от того, как вы вызываете' setName'. –
Действительно ли вы передаете переменную в функцию или ожидаете, что функция автоматически заполнит параметр 'name'/argument с переменной' name', определенной ранее? –