2013-11-14 2 views
1

Мне сложно определить, как переназначить переменную для новой функции.Изменение ссылки на переменные в javascript

У меня есть две анонимные функции, назначенные переменным, и я хочу, чтобы «первым» назначался «после» после того, как он вызывается один раз.

При использовании .toSource в Firefox, кажется, что это, безусловно, переназначение сначала после, но «первый в обработчик щелчка по-прежнему ссылается или называя первым, который был создан во время выполнения.

Почему это?

JS

var after = function() { 
    alert("AFTER"); 
} 

var first = function() { 
    alert("FIRST"); 
    //alert(first.toSource()); 
    first = after; 
} 

$(".order").click(first); 

HTML

<button type="button" class="order">Order</button> 

http://jsfiddle.net/E2R2R/2/

ответ

5

Вслед за ответом @MichaelGeary с, если вы хотите, чтобы сделать работу функции с помощью ссылки, как, что, положи вызов функции внутри анонимной функции:

$(".order").click(function() { 
    first();  
}); 

Демо: http://jsfiddle.net/E2R2R/4/

+0

Я не могу поверить, что это так просто. Я не знаю, почему я не мог думать об этом. – Tim

5

Когда вы делаете этот призыв:

$(".order").click(first); 

вы используете значение firstво время этого разговора. Его значением в то время является то, что передается в функцию click().

Изменение значения переменной first позже не повлияет на это.

Другой способ взглянуть на это: подумать о коде внутри метода jQuery click(). Он не знает, что вы использовали переменную first в своем вызове. Единственная информация, которую он имеет, - это функция, которую first ссылается во время вызова.

См. Ответ @ tymeJV, чтобы сделать то, что вы хотите. Обратите внимание на то, что в нем отличается: функция, которую вы передаете в .click() (анонимная функция), не нуждается в изменении. Когда эта функция вызывает first(), она всегда использует значение текущего значения этого имени.

+1

Благодарность за большое объяснение. Я ценю вашу помощь. Мне всегда нравится понимать, почему. – Tim

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