闭包(closure)

例1:闭包
var iBaseNum = 10;//必须先申明变量
function addNum(iNum1, iNum2) {
function doAdd() {
return iNum1 + iNum2 + iBaseNum;
}
return doAdd();//闭包
}
var a =addNum(1,2);//再调用函数
console.log(a);

(ps:函数 addNum() 包括函数 doAdd() (闭包)。内部函数是一个闭包,因为它将获取外部函数的参数 iNum1 和 iNum2 以及全局变量 iBaseNum 的值。 addNum() 的最后一步调用了 doAdd(),把两个参数和全局变量相加,并返回它们的和。

这里要掌握的重要概念是,doAdd() 函数根本不接受参数,它使用的值是从执行环境中获取的。)

 

例2:闭包和引用
function Counter(start) {
var count = start;
return {
increment: function () {
count++;
},

get: function () {
return count;
}
}
}
var foo = Counter(4);


console.log(foo.increment());//这个打出来是undefined,因为没有return
console.log(foo.get());//这个打出来是5
// foo.increment();
// foo.get(); // 5
《如果把这个放在console的上面,那么console出来的就是6,因为console又执行了一遍》
(ps:
 foo.increment();
foo.get(); // 5
// console.log(foo.increment());//这个打出来是undefined
console.log(foo.get());//这个打出来是5
foo.increment();
foo.get(); // 6
foo.increment();
foo.get(); // 7
// console.log(foo.increment());
console.log(foo.get());//这个打出来是8

例3:
function foo() {
var a = 10;

function bar() {
a *= 2;
return a;
}
return bar; // 返回内部函数 bar
}

var baz = foo();
console.log( baz());//返回数值
console.log( baz);//返回函数fn
(ps:加括号,等于调用方法啊,方法没有返回值,赋值 就是把方法赋值给了变量)




posted @ 2018-12-06 11:31  amywj  阅读(158)  评论(0编辑  收藏  举报