<!DOCTYPE html>
<html>
<body> <p>區域性變數計數。</p> <button type="button" onclick="myFunction()">計數!</button> <p id="demo">0</p> <script>
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})(); function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script> </body>
</html>

變數 add 指定了函式自我呼叫的返回字值。

自我呼叫函式只執行一次。設定計數器為 0。並返回函式表示式。

add變數可以作為一個函式使用。非常棒的部分是它可以訪問函式上一層作用域的計數器。

這個叫作 JavaScript 閉包。它使得函式擁有私有變數變成可能。

計數器受匿名函式的作用域保護,只能通過 add 方法修改。

注意事項:

在這段程式碼中,

function () {return counter += 1;作為一個閉包,是能夠訪問 counter 值的,
這就是閉包是可訪問上一層函式作用域裡變數的函式,即便上一層函式已經關閉。