iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Software Development

LeetCode-30 Days of JavaScript系列 第 2

LeetCode JS30-Day02 | 學習閉包closure - 2620.Counter

  • 分享至 

  • xImage
  •  

Day02 - 2620.Counter EASY

Description❓

Given an integer n, return a counter function. This counter function initially returns n and then returns 1 more than the previous value every subsequent time it is called ().
接收一個整數n作為參數,返回counter函式。
這個counter函式最初返回n,然後每次被調用時會返回比前一次多1的值。(n, n + 1, n + 2,類推)

Points

  • 閉包
    • 形成方式:函式內部定義另一個函式時,內式函數innerFunction可以捕獲外部作用域outerFunction的變數outerVar以形成閉包。
    • 封裝數據和行為、維護狀態:讓我們透過宣告變數closure引用outerFunction,此時我們不需要了解outerVar實現的細節,但可以取得outerVar當前的值。
    • 30Days of JS 工具書-閉包
    function outerFunction() {
      let outerVar = 10;
    
      function innerFunction() {
        console.log(outerVar); // 內部函數引用外部函數中的 outerVar
      }
    
      return innerFunction; // 返回內部函數
    }
    
    const closure = outerFunction(); // 將內部函數存儲在 closure 中
    closure(); // 執行內部函數,仍然可以訪問 outerVar 的值
    
  • 後置遞增運算子

Solution✍️

[ ▶️挑戰這一題 ] [ 本日代碼 ]

  1. createCounter中有一個閉包,包含counter函式和變量n
    const createCounter = (n) =>{
       counter=()=>{
          return n++; //後置遞增運算子 - 第一次調用 counterA() 返回 10,然後 n 增加到 11。
       }
       return counter;
    }
    
    // 將箭頭函式縮寫後,變成 const createCounter = (n)=> ()=> n++ ;
    

Testcase

counterA 引用 createCounter(10) 的結果,因此繼承了 createCounter 函数内部的作用域,
此時counterA閉包中的變數n會被保存下來,在後續的調用中該變量都可以被訪問和修改。

const counterA = createCounter(10);
const results = [
   counterA(),
   counterA(),
   counterA()
];
console.log(results); // 输出 [10, 11, 12]

上一篇
LeetCode JS30-Day01 | 收到一則歡迎訊息📬 - 2667.Hello World Function
下一篇
LeetCode JS30-Day03 |設置閉包方法 - 2704.To Be Or Not To Be
系列文
LeetCode-30 Days of JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言