<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【深入理解JS核心技術(shù)】15. 什么是柯里化函數(shù)

          共 1853字,需瀏覽 4分鐘

           ·

          2022-05-15 20:21


          柯里化是將具有多個參數(shù)的函數(shù)轉(zhuǎn)換為一系列函數(shù)的過程,每個函數(shù)只有一個參數(shù)。Currying?以數(shù)學(xué)家Haskell Curry的名字命名。通過應(yīng)用柯里化,n 元函數(shù)將其轉(zhuǎn)換為一元函數(shù)。

          讓我們舉一個 n 元函數(shù)的例子,以及它是如何變成柯里化函數(shù)的,

          const multiArgFunction = (a, b, c) => a + b + c;
          console.log(multiArgFunction(1, 2, 3)); // 6

          const curryUnaryFunction = (a) => (b) => (c) => a + b + c;
          curryUnaryFunction(1); // returns a function: b => c => 1 + b + c
          curryUnaryFunction(1)(2); // returns a function: c => 3 + c
          curryUnaryFunction(1)(2)(3); // returns the number 6
          復(fù)制代碼

          Curried 函數(shù)對于提高代碼的可重用性函數(shù)組合非常有用。

          函數(shù)聲明與函數(shù)表達式

          JavaScript引擎在任何代碼執(zhí)行之前,會先讀取函數(shù)聲明,并在執(zhí)行上下文中生成函數(shù)定義。而函數(shù)表達式必須等到代碼執(zhí)行到它那一行,才會在執(zhí)行上下文中生成函數(shù)定義。

          // 沒問題
          console.log(sum(10, 10));
          function sum(num1, num2) {
          return num1 + num2;
          }
          復(fù)制代碼

          代碼可以正常運行,因為函數(shù)聲明會在任何代碼執(zhí)行之前先被讀取并添加到執(zhí)行上下文。這個過程叫作函數(shù)聲明提升

          在執(zhí)行代碼時,JavaScript引擎會先執(zhí)行一遍掃描,把發(fā)現(xiàn)的函數(shù)聲明提升到源代碼樹的頂部。因此即使函數(shù)定義出現(xiàn)在調(diào)用它們的代碼之后,引擎也會把函數(shù)聲明提升到頂部。

          改為函數(shù)表達式就回出錯:

          // 會出錯
          console.log(sum(10, 10));
          let sum = function(num1, num2) {
          return num1 + num2;
          };
          復(fù)制代碼

          函數(shù)作為值

          因為函數(shù)名在ECMAScript中就是變量,所以函數(shù)可以用在任何可以使用變量的地方。這意味著不僅可以把函數(shù)作為參數(shù)傳給另一個函數(shù),而且還可以在一個函數(shù)中返回另一個函數(shù)。

          函數(shù)表達式

          定義函數(shù)有兩種方式:函數(shù)聲明和函數(shù)表達式。

          函數(shù)聲明:

          function functionName(arg0, arg1, arg2) {
          // 函數(shù)體
          }
          復(fù)制代碼

          函數(shù)聲明的關(guān)鍵特點是函數(shù)聲明提升,即函數(shù)聲明會在代碼執(zhí)行之前獲得定義。這意味著函數(shù)聲明可以出現(xiàn)在調(diào)用它的代碼之后:

          sayHi();
          function sayHi() {
          console.log('Hi!');
          }
          復(fù)制代碼

          因為 JavaScript 引擎會先讀取函數(shù)聲明,然后再執(zhí)行代碼。

          第二種創(chuàng)建函數(shù)的方式就是函數(shù)表達式。

          let functionName = function(arg0, arg1, arg2) {
          // 函數(shù)體
          }
          復(fù)制代碼

          函數(shù)表達式看起來就像一個普通的變量定義和賦值,即創(chuàng)建一個函數(shù)再把它賦值給一個變量functionName。

          這樣創(chuàng)建的函數(shù)叫作匿名函數(shù)(anonymous funtion),因為 function 關(guān)鍵字后面沒有標識符。(匿名函數(shù)有也時候也被稱為蘭姆達函數(shù))。

          任何時候,只要函數(shù)被當作值來使用,它就是一個函數(shù)表達式。

          未完結(jié)!更多內(nèi)容盡情期待下一節(jié)~

          【深入理解JS核心技術(shù)】歡迎各位觀眾老爺,求點贊,求關(guān)注,求轉(zhuǎn)發(fā)~

          深入理解JS核心技術(shù)

          NumberTitle
          1在 JavaScript 中創(chuàng)建對象的可能方式有哪些
          2什么是原型鏈
          3調(diào)用、應(yīng)用和綁定有什么區(qū)別
          4什么是 JSON 及其常用操作
          5數(shù)組切片方法的目的是什么
          6數(shù)組拼接方法的目的是什么
          7切片和拼接有什么區(qū)別
          8你如何比較Object和Map
          9== 和 === 運算符有什么區(qū)別
          10什么是 lambda 或箭頭函數(shù)
          11什么是一級函數(shù)
          12什么是一階函數(shù)
          13什么是高階函數(shù)
          14什么是一元函數(shù)
          15什么是柯里化函數(shù)
          16什么是純函數(shù)
          17let 關(guān)鍵字的作用是什么
          18let 和 var 有什么區(qū)別
          19選擇名稱let作為關(guān)鍵字的原因是什么
          20如何在 switch 塊中重新聲明變量而不會出錯
          21什么是暫時性死區(qū)
          22什么是 IIFE(立即調(diào)用函數(shù)表達式)
          瀏覽 34
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码在线观看网 | 亚洲性爱手机在线 | 黄色视频www | 羽月希产后再次复出的电影 | ss视频在线 |