摘要:回調函數定義回調是一個函數,它作為參數傳遞給另一個函數,并在其父函數完成后執行。這意味著回調函數本質上是一個閉包。正如我們所知,閉包能夠進入包含它的函數的作用域,因此回調函數能獲取包含它的函數中的變量,以及全局作用域中的變量。
回調函數 定義
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.函數也是對象
回調是一個函數,它作為參數傳遞給另一個函數,并在其父函數完成后執行。
1、函數是一種對象
function test() {}; console.log(test instanceof Object); // true
很明顯函數是一種對象,但你不能說函數是對象的一種。因為他倆之間是沒有包含關系的。有點像雞蛋和雞的關系。
2、對象都是通過函數創建的
先來看一個例子
function test() { this.name="哈哈" }; var test2=new test(); console.log(test2 instanceof Object); //true
這個例子可以說明對象可以被函數創建。那為什么要說對象都是通過函數創建的,那對象字面量是不是也是通過函數來創建的,答案是肯定的,這是一種語法糖方式。舉個簡單的例子
var obj={ name:"哈哈", age:"18" } var obj=new Object() obj.name="哈哈"; obj.age="18";
上面的對象字面量其實是通過下面的構造函數來創建的。而其中的Object是一種函數:
console.log(typeof Object) //function
通過上面的簡單例子我們可以得出一個結論:對象是通過函數創建的,而函數又是一種對象。
js的函數可以作為參數進行傳遞再看下面兩段代碼:
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方法作為參數傳遞給execute方法
第二段代碼則是直接將匿名函數作為參數傳遞給execute方法
實際上:
function say (value) { alert(value); } // 注意看下面,直接寫say方法的方法名與下面的匿名函數可以認為是一個東西 // 這樣再看上面兩段代碼是不是對函數可以作為參數傳遞就更加清晰了 say; function (value) { alert(value); }
這里的say或者匿名函數就被稱為回調函數!
回調函數是閉包都能夠我們將一個毀掉函數作為變量傳遞給另一個函數時,這個毀掉函數在包含它的函數內的某一點執行,就好像這個回調函數是在包含它的函數中定義的一樣。這意味著回調函數本質上是一個閉包。
正如我們所知,閉包能夠進入包含它的函數的作用域,因此回調函數能獲取包含它的函數中的變量,以及全局作用域中的變量。
如何避免回調地獄你可以有如下幾個方法:
? 模塊化:將回調函數分割為獨立的函數 ? 使用Promises ? 使用yield ? 來計算生成器或Promise
解析:這個問題有很多種答案,取決你使用的場景,例如ES6, ES7,或者一些控制流庫。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105761.html
摘要:回調定義剛開始學習時,對回調函數的理解僅僅停留在知道定義階段。什么是回調函數就是將一個函數作為參數傳遞給另一個函數,作為參數的這個函數就是回調函數。參考文章詳解回調函數以為例解讀異步回調和異步編程的種方法阮一峰的網絡日志 回調定義 剛開始學習javascript時,對回調函數的理解僅僅停留在知道定義階段。什么是回調函數? 就是將一個函數作為參數傳遞給另一個函數,作為參數的這個函數就是回...
摘要:同步與異步以上為同步代碼,函數必須等函數執行完畢后才能執行。異步回調產生的結果就是,函數的調用并不直接返回結果,而往往是交給回調函數進行異步處理。 同步與異步: function a(){} function b(){} a(); b(); 以上為同步代碼,函數b必須等函數a執行完畢后才能執行。 function a(){ ...
摘要:在中回調函數非常重要,它們幾乎無處不在。首先你得先明白一點函數也是對象想弄明白回調函數,首先的清楚地明白函數的規則。理解了函數也是對象,先不急聊回調函數,先看看下面代碼只寫變量名返回的將會是方法本身,以字符串的形式表現出來。 在javascript中回調函數非常重要,它們幾乎無處不在。像其他更加傳統的編程語言都有回調函數概念,但是非常奇怪的是,完完整整談論回調函數的在線教程比較少,倒是...
閱讀 2816·2023-04-25 15:01
閱讀 3044·2021-11-23 10:07
閱讀 3362·2021-10-12 10:12
閱讀 3452·2021-08-30 09:45
閱讀 2191·2021-08-20 09:36
閱讀 3584·2019-08-30 12:59
閱讀 2429·2019-08-26 13:52
閱讀 932·2019-08-26 13:24