# 介紹 JavaScript 閉包 >引用來源:[另一種方式介紹 JavaScript 閉包](https://ithelp.ithome.com.tw/articles/10191515) 運作原理:就是呼叫函式內的函式。 將函式賦予在另一個變數(balance)上,指向外層函式 使其可以不斷的反覆呼叫,且內層記憶體不會被釋放。 此變數(balance)每次被呼叫時,只會執行內層函式,在內層記憶體沒有被釋放的情況下,myMoney變數會不斷被更新。 ### 引用來源範例:剩餘的金額計算 ```javascript= function buyItem() { var myMoney = 1000; return function (price) { // 這個閉包目前會被重複呼叫 myMoney = myMoney - price; // myMoney 第一次由外部傳入,接下來在這個 function 內不斷更新 return myMoney; } } var balance = buyItem(); // 存取內部函式的變數 balance(100); // 900 balance(100); // 800 balance(100); // 700 // 每次執行都是跑內層的函式,因此也只更新內層的函式變數 ``` ### 範例 ```javascript= // 會員點數累積,會員商品打8折後,1元換1點,累計點數 function haveDiscount() { let bonusPoints = 200; // 最初會員點數 return function (itemPrice) { bonusPoints += itemPrice * 0.8; return bonusPoints; } } let discountPrice = haveDiscount(); discountPrice(200); // 360 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up