使用JavaScript了解匿名函数

时间:2013-11-26 22:51:32

标签: javascript jquery

我理解一个功能,以及它是如何工作的。但是,我不确定以下内容:

 function(msg) { alert(msg); }

如果没有分配给任何东西,它是如何调用的?

我对此更熟悉:

function alert(msg) { // set it
   alert(msg);
}

alert('hello!'); //call it

5 个答案:

答案 0 :(得分:2)

您可以将使用此语法定义的函数分配给变量,就像其他对象一样:

var myAlert = function(msg) { alert(msg); };
myAlert("hello!");

匿名函数的最常见用例是作为高阶函数 - 当您将函数作为另一个函数的参数提供时。一个常见的例子是AJAX请求 - 您提供了一个在请求完成时执行的回调函数。使用jQuery,你可以写:

$.get('/someurl', myAlert);
myAlert处的资源响应时,jQuery将执行/someurl

答案 1 :(得分:1)

调用匿名函数有四种常用方法:

将其保存为如此变量:

var fn = function(msg) {
   // do something
}

通过括号括起来执行:

 (function(msg) {
    console.log( msg ); // -> 'This is my message'
 })('This is my message');

通过前缀“!”

执行
 !function(msg) {
    console.log( msg ); // -> 'This is my message'
 }('This is my message');

将其作为回调传递

someFn( param1, param1, function( msg ) {
   console.log( msg );
});

答案 2 :(得分:0)

除了将其分配给变量之外,joews指出,您可以像这样立即调用它:

(function(msg) { alert(msg); })('hello!');

或者您可能希望将其作为参数传递给另一个函数,如下所示:

['hello!'].forEach(function(msg) { alert(msg); });

答案 3 :(得分:0)

本身并非如此。你需要对它有一些参考。

function(msg) { alert(msg); }();
// alert will appear

var f = function(msg) { alert(msg); };
f();
// alert will appear

$.ajax({
         url: '/some/ajax/url',
         method:' get'
       })
.done(function(msg) { alert(msg); });
// alert will appear displaying the response data.

done函数的想法接受一个参数并执行该参数,如下所示:

function done(callback) {
    ...
    callback(responseData);
}

我对jquery ajax api的使用可能不准确。我很快就这样说明了这一点。

当你将内联函数传递给某个东西或将它分配给变量时,这种模式被称为函数表达式。

答案 4 :(得分:0)

必须分配给var

例如

var f = function () {};

或分配给功能的

Fun(arg1, function (){});