0

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

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

在 Firefox 中使用 .toSource 时,似乎它肯定会重新分配 first 到 after,但是“单击处理程序中的 first 仍然引用或调用在运行时创建的 first 。

为什么是这样?

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/

4

2 回答 2

5

当您拨打此电话时:

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

first 在调用时使用的是 的值。它当时的值就是传递给click()函数的值。

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

另一种看待它的方式:想想 jQueryclick()方法中的代码。它不知道您first在调用中使用了该变量。first它拥有的唯一信息是调用时引用的函数。

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

于 2013-11-14T19:23:21.480 回答
5

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

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

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

于 2013-11-14T19:25:29.523 回答