以下是一個簡單的closure example:
function doSomething(){ var x = 100; function add(y){ x = x + y; return x; } return add; } var add1 = doSomething(); var add2 = doSomething(); //110 console.log(add1(10)); //120 console.log(add1(10)); //115 console.log(add2(15)); //130 console.log(add2(15));
主要是呼叫doSomething這個function時,將會傳回一個內部function,同時這個function的x會參照上層的x變數,此時會將x綁在add function這個scope,x就會相當於一個private static變數,當被export的function呼叫一次,x變數也會跟著累加,並不會因為呼叫完export的function而釋放。另外一個很重要的是,當doSomething被呼叫時,不管他被呼叫次數幾次,每個被export function出來的scope都是不一樣的,換句話說,各自綁定的x變數都是不共用的,而是都擁有各自的記憶體區塊。