【笔记】 《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);

你可能感兴趣的:(命名空间,闭包,private)