使用JavaScript理解匿名函数

Understanding anonymous functions with JavaScript

本文关键字:函数 JavaScript 使用      更新时间:2023-10-20

我了解函数及其工作原理。然而,我不确定以下内容:

 function(msg) { alert(msg); }

如果这没有分配给任何东西,它是如何命名的?

我更熟悉这个:

function alert(msg) { // set it
   alert(msg);
}
alert('hello!'); //call it

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

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

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

$.get('/someurl', myAlert);

jQuery将在CCD_ 2处的资源响应时执行CCD_。

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

将其保存到一个变量中,如下所示:

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 );
});

正如joews所指出的,除了将其分配给变量之外,您还可以立即调用它,如下所示:

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

或者你可能想把它作为一个参数传递给另一个函数,比如:

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

就其本身而言,它不是。你需要有某种参考。

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-ajaxapi的使用可能不准确。我这么做很快就说明了这一点。

顺便说一句,当您将内联函数传递给某个对象或将其分配给变量时,这种模式被称为函数表达式。

必须分配给var

例如

var f = function () {};

或分配给函数的参数

Fun(arg1, function (){});