Javascript Closure

以下是一個簡單的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,同時這個functionx會參照上層的x變數,此時會將x綁在add function這個scopex就會相當於一個private static變數,當被exportfunction呼叫一次,x變數也會跟著累加,並不會因為呼叫完exportfunction而釋放。另外一個很重要的是,當doSomething被呼叫時,不管他被呼叫次數幾次,每個被export function出來的scope都是不一樣的,換句話說,各自綁定的x變數都是不共用的,而是都擁有各自的記憶體區塊。