何时使用jquery将函数赋值给变量

时间:2013-08-14 23:13:47

标签: javascript jquery function variables

所以我一直在搞乱一些Jquery Ajax的承诺/诽谤等......而且我遇到了一些我不完全理解的东西,与Jquery Ajax没有严格的关系。

我总是声明并调用这样的函数:

function foo1() { //sets function
    alert('foo1');
}

foo1(); //calls function

但似乎越多我看到不同的代码,很多人都在声明如下的功能,我只是复制并粘贴了一个我看过的例子,所以我不会错过任何东西:

var promise = $.ajax({
    url: "/myServerScript"
});

promise.done(myStopAnimationFunction);

我理解上面的内容,只是一个例子。

问题是,将函数分配给变量会更好吗?有什么利弊,以及在什么情况下使用这种方式? 在这段代码中的什么点是被调用的实际函数。确实

    promise.done(myStopAnimationFunction);

调用ajax函数,然后调用回调,还是只调用回调?

由于

2 个答案:

答案 0 :(得分:2)

在您的示例中,您将promise变量分配给$.ajax返回的内容(jqXHR对象)

var promise = $.ajax({
    url: "/myServerScript"
});

然后你说,一旦完成,你想打电话给myStopAnimationFunction。由于默认情况下$.ajaxasync,因此浏览器会跳过此处,只在请求完成后致电myStopAnimationFunction

promise.done(myStopAnimationFunction);

现在,使用您的myStopAnimationFunction;你可以随时做以下事情:

promise.done(function(){
    $('.loader').hide();
});

但是如果你有很多你将要使用的代码,那就把它放在一个函数中,这样你就不需要自己重复了(参见DRY) - 但这与jQuery无关。

您的示例与执行完全相同:

$.ajax({
    url: "/myServerScript"
}).done(function(){
    $('.loader').hide();
});

答案 1 :(得分:1)

这是两件非常不同的事情!第一个是函数声明。第二个是函数调用,分配给promise变量的是您正在调用的函数返回的值($.ajax)

在任何情况下,也可以将函数分配给变量(但我不确定这是否是你真正要求的 - 如果是,这是var functionName = function() {} vs function functionName() {}的副本)。


  

promise.done(myStopAnimationFunction);   同时调用ajax函数,然后调用回调,还是只调用回调?

都不是。该行是对done对象的promise的调用,注册当ajax响应到达时要调用的回调。此时你调用done,ajax请求可能已经被触发,响应甚至可能已经可用(如果是这样的话,将立即调用回调)。