iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
0
Modern Web

一個 JS 學習者的日常系列 第 10

一個 JS 學習者的日常 day9

function saveMoney(newSaving = 0) {
  var myAccount = 20000
  return function () {
    return myAccount + newSaving;
  }
}

total = saveMoney(1000)
total()

在線上學習網站第一次看到這個寫法覺得很神奇,卻不知道他就是所謂鼎鼎大名的閉包(Closure)。

思考:
什麼是閉包?看 code ,是由兩個函式構成的,而且互為表裡。

前面的文章曾經提到過, JS 用 function 去界定變數名稱的作用範圍,當我們用把一個函式用另一個包起來,便會形成一個封閉的空間。而裡面的變數名稱,也只在範圍內可以使用,我們稱為private變數。使用它,來達到隱藏資訊的效果。

再看一個累加的例子

function accumulation(number = 0){
  return function(){
    console.log( number++ )
  }
}

var total = accumulation()
total() // 0
total() // 1
total() // 2

為什麼 number 會一直累加上去,而不是因為每次執行而開始重新計算,這便是閉包達到的效果。藉由雙層函示的架構,將 number 變數存在記憶體當中,並藉由 accumulation 去執行裡面的匿名函式去改變值。

閉包博大精深,網路上有很多不同的資訊,但基本的 function 產生作用域,用雙層 function 去達到封閉作用空間,是我對閉包基本認知。


上一篇
一個 JS 學習者的日常 day8
下一篇
一個 JS 學習者的日常 day10
系列文
一個 JS 學習者的日常30

尚未有邦友留言

立即登入留言