您的位置:首页 > Web前端 > JavaScript

JavaScript闭包

2016-06-21 16:45 274 查看
刚刚学习js,发现闭包不太好理解,稍不留神就出错,总结下今天学的内容。

以代码为例,看的清楚:

<pre name="code" class="javascript">var cc = {name : 'cc'};
function KeepVal(val){
return function(){
return val;
};
}
//保持变量
var KV = KeepVal(cc);
cc = 10;
console.log(cc.name);
console.log(KV());

var obj1 = {}
var notobj = 2;
var obj2 = {
obj1,
notobj : notobj
};
console.log(obj2);

function CSum(){
var sm = 0;
return function(val){
sm += val;
return sm;
}
}
//持有状态
var cs1 = CSum();
console.log(cs1(1));
console.log(cs1(2));
console.log(cs1(3));
var cs2 = CSum();
console.log(cs2(5));
console.log(cs2(2));
console.log(cs2(3));
console.log(cs1(0));

//for循环中容易用错的闭包写法,从上面的两个例子里就可以明白为什么下面这个Array赋值要使用匿名函数了
function getifunc(val){
var arr = [];
arr.length = val;
for(var i = 1; i < val; ++i)
{
arr[i] = (function(v){
return function(){
return v;
};
})(i);
}
return arr;
}

var arr = getifunc(10);
console.log('array length : ' + arr.length);
//console.log(arr[5]());
arr.forEach(function(currentValue, index, arr){
console.log(currentValue());
});

var arr2 = [1, 2, 3];
var EvFunc = function(currentValue, index, arr){
console.log(currentValue);
};
arr2.forEach(EvFunc);



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 闭包