在javascript中更改变量引用

Tim*_*Tim 0 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 );
Run Code Online (Sandbox Code Playgroud)

HTML

<button type="button" class="order">Order</button>
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ary 5

当你打这个电话时:

$(".order").click( first );
Run Code Online (Sandbox Code Playgroud)

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

first稍后更改变量的值不会影响这一点.

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

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


tym*_*eJV 5

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

$(".order").click( function() {
    first();    
});
Run Code Online (Sandbox Code Playgroud)

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