簡體   English   中英

閉包與回調有什么不同?

[英]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.

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