簡體   English   中英

了解JavaScript的匿名函數

[英]Understanding anonymous functions with JavaScript

我了解功能及其工作原理。 但是,我不確定以下幾點:

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

/someurl的資源響應時,jQuery將執行myAlert

調用匿名函數有四種常用方法:

將其保存到這樣的變量中:

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 ajax api的用法可能不准確。 我這樣做很快就說明了這一點。

順便說一句,當您將內聯函數傳遞給某些東西或將其分配給變量時,該模式稱為函數表達式。

必須分配給一個變量

例如

var f = function () {};

或分配給函數arg

Fun(arg1, function (){});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM