[英]How is a closure different from a callback?
請查看以下內容: http : //jibbering.com/faq/faq_notes/closures.html 。 它可以幫助您更好地理解閉包與函數的關系。
這是一組閉包示例: http : //www.javascriptkit.com/javatutors/closures2.shtml
基本上,回調就像一個函數指針。 使它成為閉包的位是當該函數訪問它所在的上下文中的任何內容時,就像它之外的變量一樣。 當發生這種情況時,該函數將使用變量的當前值(而不是復制它們)。 見例4。
簡單來說:使用上下文變量的回調是一個閉包。
有倒閉的一個很好的定義, 在這里 :
“閉包”是一個表達式(通常是一個函數),它可以將自由變量與綁定這些變量的環境(“關閉”表達式)結合在一起。
在實踐中,這意味着它是一個具有一些隱藏變量的函數。
回調是一個更高層次的想法。 通常,它是一個傳遞的函數,其目的是在稍后調用。 在JavaScript中,閉包通常用作回調。
根據上下文變量(即綁定變量(==對象狀態))的回調將是一個閉包。 它將是一個純函數,否則,它只需要自由變量(==參數)。
以下是區分這兩者的方法:
關閉
Closure用於擴展功能,例如,如果用戶單擊按鈕,我們希望在屏幕上發生某些事情,在這種情況下,我們將使用Closure來傳遞用戶事件(單擊)然后將數據推送到風景。
打回來
回調或多或少類似於閉包,但它更習慣於通知並提供同步功能。 例如,如果你執行jQuery Ajax調用,你將有回調,如
success()
,error()
,beforeSend()
等等來處理異步數據。
關閉:
另一個函數中的函數關鍵字,您正在創建一個閉包
或者一個函數返回另一個函數,我們可以說是閉包
注意簡單英語:在另一個函數中作為參數傳遞的一點點差異函數是回調,或者如果在另一個函數中定義是閉包
var length = 101; function fn2() { console.log("fffxxx: "+this.length); } var obj = { length: 5, method3: function(fn) { fn(); arguments[0](); } }; obj.method3(fn2, 1);
fffxxx:101 fffxxx:2**
什么是回調函數?
回調函數是一個函數,它是:
在簡單英語中,我們說 回調是由另一個函數調用的任何函數,它將第一個函數作為參數或作為參數傳遞的函數
通常說“調用函數”,“啟動函數”或“執行函數”。
function getUserInput(firstName, lastName, age, callback2,callback1) { var fullName = firstName + " " + lastName; // Make sure the callback is a function if (typeof callback2 === "function") { // Execute the callback function and pass the parameters to it callback2(fullName, age); } if (typeof callback1 === "function") { callback1(lastName); } } function callbackforlastname1(lname){ console.log("---"); } function genericPoemMaker(name, aged) { console.log(name + " is finer than fine wine."); console.log("A " + aged + " of unfortunl smile"); } getUserInput("Avinash", "Maurya", "26", genericPoemMaker,callbackforlastname1);
我看不出這兩者是如何相關的? 閉包將局部狀態的某些部分轉化為某種功能,將其視為通過引用傳遞。
回調旨在通知您某些更改,並重定向程序流。 閉包可以修改本地狀態,但是你永遠不會得到處理器時間來處理它,就像你使用回調一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.