2014-01-14 4 views
0

У меня есть модуль JS, и я хочу установить значение для локальной переменной. Я думал, что я могу использовать одни и те же имена, используя «это»:JS - Как поместить локальную переменную вправо

JS

(function() { 
    var amount = 0; 
    var setAmount = function(amount) { 
     this.amount = amount; 
    } 
    ........ 
})(); 
+0

Узнайте, как это работает: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this –

ответ

2

amount находится в области видимости функции, так что вам не нужно this ключевого слова.

(function(){ 

var amount = 0; 

var setAmount = function(newAmount){ 
    amount = newAmount; 
} 
})(); 
0

Вы используете анонимную функцию самозавершения, у вас нет «этого», потому что это не объект. В вашем случае вы просто поставить:

(function(){ 

var amount = 0; 

var setAmount = function(pamount){ 

        amount = pamount; 
       } 
    ........ 
})(); 
+0

не работает :( – user2952265

+1

изменить имя переменной 'amount 'параметр – megawac

+0

Извините, вы правы, что вам нужно поставить pamount, например. –

1
var amount = 0, setAmount = function(myAmount) { 
myAmount = amount; 
}; 
0

это как this работает

var x = { 
amount : 0, 
setAmount : function(){ 
    alert(this.amount); 
    } 
} 

x.setAmount(); //alert 0 
0

Представьте две коробки, одна большая и одна маленькая. Маленькая коробка находится внутри большего ящика.

Маленькая коробка представляет собой функцию setAmount, которую вы определили. Большой ящик представляет собой закрытие, которое обертывает эту функцию setAmount.

Каждая коробка знает только то, что внутри и что находится внутри своих родительских внешних ящиков.

Ключевое слово this, означает внутри этой коробки.

Маленькая коробка уже может видеть amount, потому что она находится в большой коробке. Если вы определяете this.amount = something внутри маленькой коробки, это, по сути, то же самое, что и var amount = something.

Вы также должны быть осторожны с именами аргументов, потому что это может привести к головной боли, если вы не будете осторожны.

Проблема, с которой вы сталкиваетесь, представляет собой проблему с определением области охвата, если вам абсолютно необходимо называть переменные таким образом - вот решение.

(function() { 
    var amount = 0; 
    var scope = this; 
    var setAmount = function(amount) { 
     scope.amount = amount; 
    } 
    ........ 
})(); 

Что это делает создать переменную в большем окне, которое ссылается на его объем (в нашем примере вернуться к своей собственной коробке). Поскольку маленький ящик находится внутри большого окна, он может видеть переменную области видимости.

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