2014年2月28日 星期五

閉包 Closures

function diySandwich(ingredient) {
    // 回傳之後, 內層 function 能夠參考定義那些在外層 function 中的變數 ingredient
    return { // 回傳一個物件, 含有三個 closures : make / getIngredient / changeIngredient
        make: function (filling) { return ingredient + ' and ' + filling; },
        getIngredient: function () { return ingredient; },
        changeIngredient: function (newIngredient) { ingredient = newIngredient; } // 更新外層變數的值
    };
}

執行結果 :
var mySandwich = diySandwich('ham');
undefined
mySandwich.getIngredient();
"ham"
mySandwich.make('honey');
"ham and honey"
mySandwich.changeIngredient('turkey');
undefined
mySandwich.getIngredient();
"turkey"
mySandwich.make('chili');
"turkey and chili"


沒有留言: