在javascript中更改变量引用

时间:2013-11-14 19:19:05

标签: javascript jquery javascript-events

我很难弄清楚如何将变量重新分配给新函数。

我有两个分配给变量的匿名函数,我希望“first”在调用一次后将其自身分配给“after”。

在Firefox中使用.toSource时,似乎首先要重新分配,但“点击处理程序中的第一个仍然是引用或调用在运行时创建的第一个。

为什么会这样?

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/

2 个答案:

答案 0 :(得分:5)

当您拨打此电话时:

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

您在此次通话时使用first 的值。它当时的值是传递给click()函数的值。

稍后更改first变量的值不会影响此。

另一种看待它的方法:考虑jQuery的click()方法中的代码。它不知道您在通话中使用了first变量。它唯一的信息是first在通话时引用的功能。

请参阅@ tymeJV的答案,了解如何做你想做的事。请注意它的不同之处:您传递给.click()(匿名函数)的函数不必更改。当该函数调用first()时,它始终使用该名称的当前值。

答案 1 :(得分:5)

跟进@MichaelGeary的回答,如果你想通过这样的引用来使函数工作,那么把你的函数调用放在一个匿名函数中:

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

演示:http://jsfiddle.net/E2R2R/4/