成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于js的回調(diào)函數(shù)

W4n9Hu1 / 2225人閱讀

摘要:回調(diào)函數(shù)定義回調(diào)是一個函數(shù),它作為參數(shù)傳遞給另一個函數(shù),并在其父函數(shù)完成后執(zhí)行。這意味著回調(diào)函數(shù)本質(zhì)上是一個閉包。正如我們所知,閉包能夠進入包含它的函數(shù)的作用域,因此回調(diào)函數(shù)能獲取包含它的函數(shù)中的變量,以及全局作用域中的變量。

回調(diào)函數(shù) 定義
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
回調(diào)是一個函數(shù),它作為參數(shù)傳遞給另一個函數(shù),并在其父函數(shù)完成后執(zhí)行。
函數(shù)也是對象

1、函數(shù)是一種對象

function test() {};
console.log(test instanceof Object);    //    true

很明顯函數(shù)是一種對象,但你不能說函數(shù)是對象的一種。因為他倆之間是沒有包含關(guān)系的。有點像雞蛋和雞的關(guān)系。

2、對象都是通過函數(shù)創(chuàng)建的
先來看一個例子

function test() {
    this.name="哈哈"
};
var test2=new test();
console.log(test2 instanceof Object);    //true

這個例子可以說明對象可以被函數(shù)創(chuàng)建。那為什么要說對象都是通過函數(shù)創(chuàng)建的,那對象字面量是不是也是通過函數(shù)來創(chuàng)建的,答案是肯定的,這是一種語法糖方式。舉個簡單的例子

var obj={
    name:"哈哈",
    age:"18"
}
var obj=new Object()
obj.name="哈哈";
obj.age="18";

上面的對象字面量其實是通過下面的構(gòu)造函數(shù)來創(chuàng)建的。而其中的Object是一種函數(shù):

console.log(typeof Object)    //function

通過上面的簡單例子我們可以得出一個結(jié)論:對象是通過函數(shù)創(chuàng)建的,而函數(shù)又是一種對象。

js的函數(shù)可以作為參數(shù)進行傳遞

再看下面兩段代碼:

function say (value) {
    console.log((value));
}
function execute (someFunction, value) {
    someFunction(value);
}
execute(say, "hi js.");

function execute (someFunction, value) {
    someFunction(value);
}
execute(function(value){console.log((value));}, "hi js.");

上面第一段代碼是將say方法作為參數(shù)傳遞給execute方法
第二段代碼則是直接將匿名函數(shù)作為參數(shù)傳遞給execute方法

實際上:

function say (value) {
    alert(value);
}
// 注意看下面,直接寫say方法的方法名與下面的匿名函數(shù)可以認為是一個東西
// 這樣再看上面兩段代碼是不是對函數(shù)可以作為參數(shù)傳遞就更加清晰了
say;

function (value) {
    alert(value);
}

這里的say或者匿名函數(shù)就被稱為回調(diào)函數(shù)!

回調(diào)函數(shù)是閉包

都能夠我們將一個毀掉函數(shù)作為變量傳遞給另一個函數(shù)時,這個毀掉函數(shù)在包含它的函數(shù)內(nèi)的某一點執(zhí)行,就好像這個回調(diào)函數(shù)是在包含它的函數(shù)中定義的一樣。這意味著回調(diào)函數(shù)本質(zhì)上是一個閉包。

正如我們所知,閉包能夠進入包含它的函數(shù)的作用域,因此回調(diào)函數(shù)能獲取包含它的函數(shù)中的變量,以及全局作用域中的變量。

如何避免回調(diào)地獄

你可以有如下幾個方法:

? 模塊化:將回調(diào)函數(shù)分割為獨立的函數(shù)
? 使用Promises
? 使用yield 
? 來計算生成器或Promise

解析:這個問題有很多種答案,取決你使用的場景,例如ES6, ES7,或者一些控制流庫。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105761.html

相關(guān)文章

  • 關(guān)于js回調(diào)、同步回調(diào)、異步回調(diào)

    摘要:回調(diào)定義剛開始學(xué)習(xí)時,對回調(diào)函數(shù)的理解僅僅停留在知道定義階段。什么是回調(diào)函數(shù)就是將一個函數(shù)作為參數(shù)傳遞給另一個函數(shù),作為參數(shù)的這個函數(shù)就是回調(diào)函數(shù)。參考文章詳解回調(diào)函數(shù)以為例解讀異步回調(diào)和異步編程的種方法阮一峰的網(wǎng)絡(luò)日志 回調(diào)定義 剛開始學(xué)習(xí)javascript時,對回調(diào)函數(shù)的理解僅僅停留在知道定義階段。什么是回調(diào)函數(shù)? 就是將一個函數(shù)作為參數(shù)傳遞給另一個函數(shù),作為參數(shù)的這個函數(shù)就是回...

    BakerJ 評論0 收藏0
  • 同步與異步、異步與回調(diào)

    摘要:同步與異步以上為同步代碼,函數(shù)必須等函數(shù)執(zhí)行完畢后才能執(zhí)行。異步回調(diào)產(chǎn)生的結(jié)果就是,函數(shù)的調(diào)用并不直接返回結(jié)果,而往往是交給回調(diào)函數(shù)進行異步處理。 同步與異步: function a(){} function b(){} a(); b(); 以上為同步代碼,函數(shù)b必須等函數(shù)a執(zhí)行完畢后才能執(zhí)行。 function a(){ ...

    dinfer 評論0 收藏0
  • 徹底理解JavaScript中回調(diào)函數(shù) (推薦)

    摘要:在中回調(diào)函數(shù)非常重要,它們幾乎無處不在。首先你得先明白一點函數(shù)也是對象想弄明白回調(diào)函數(shù),首先的清楚地明白函數(shù)的規(guī)則。理解了函數(shù)也是對象,先不急聊回調(diào)函數(shù),先看看下面代碼只寫變量名返回的將會是方法本身,以字符串的形式表現(xiàn)出來。 在javascript中回調(diào)函數(shù)非常重要,它們幾乎無處不在。像其他更加傳統(tǒng)的編程語言都有回調(diào)函數(shù)概念,但是非常奇怪的是,完完整整談?wù)摶卣{(diào)函數(shù)的在線教程比較少,倒是...

    RayKr 評論0 收藏0
  • 一個關(guān)于回調(diào)故事

    摘要:回調(diào)函數(shù)不是由該函數(shù)的實現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)用的,用于對該事件或條件進行響應(yīng)。大體意思就是回調(diào)是通過函數(shù)定義的變量通過參數(shù)傳入另一個函數(shù),在另一個函數(shù)進行調(diào)用,我們就稱之為回調(diào)函數(shù)。 1.回調(diào)的故事 1.最近辭職換了新工作,新公司的工作模式是前后端分離的,但是目前前端框架還需要了解以及熟悉,之前的框架又想廢棄,于是不得不用原生來開發(fā),但是原生得造輪子...

    Backache 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<