【筆記】 《js權威指南》- 第8章 函數 - 8.5 作爲命名空間的函數 - 8.6 閉包

1.作爲命名空間的函數:

通過將代碼放到函數內,將全局變量轉換爲局部變量,防止同名衝突。

(function() {
    //模塊代碼
}())

2.閉包:

在外部函數中設置局部變量並得以在閉包的作用域中保存,實現隱藏私有屬性:

var uniqueInterger = (function() {
    var counter = 0;
    return function() {return counter++;};
} ());

注意:

(1).嵌套的函數不會講作用域的私有成員複製一份:

//這裏的閉包關聯的變量v
function constfunc(v) {return function() {return v;};}

var funcs = [];
for (i = 0; i < 10; i++) {
    //讓閉包中的v都爲獨立的副本
    funcs[i] = constfunc(i);
}

funcs[5](); //5

function constfuncs() {
    var funcs = [];
    for (var  i = 0; i < 10; i++) {
        //閉包關聯了i, 在執行循環以後i變成了10
        funcs[i] = function() {return i;};
    }

    return funcs;
}

var funcs = constfuncs();
funcs[5](); //10

(2).閉包的this值並不一定是外部函數的this值,如果要使用外部函數的this值最好在外部函數中聲明一個變量保存外部函數的this;

(3).外部函數和閉包的argumnets對象同(2);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章