闭包:
AO:Activation Object , GO: Global Object
例1.
function add() {
var num = 0;
function a() {
console.log(++num);
}
return a;
}
var myAdd = add();
myAdd();
myAdd();
myAdd();
// 1
// 2
// 3
例2.
function test() {
var food = 'apple';
var obj = {
eatFood: function () {
if (food != '') {
console.log(food);
food = '';
} else {
console.log('no');
}
},
pushFood: function (myFood) {
food = myFood;
}
}
return obj;
}
var person = test();
person.eatFood();
person.eatFood();
person.pushFood('banana'); //只是赋值,未输出
person.eatFood();
// apple,
// no,
// banana
例3.
a = 100;
function demo(e) {
function e() {}
arguments[0] = 2;
console.log(e);
if (a) {
var b = 123;
function c() {
//不允许在if中。。
}
}
var c;
a = 10;
var a;
console.log(b);
f = 123;
console.log(c);
console.log(a);
}
var a;
demo(1);
console.log(a);
console.log(f);
// GO: a:undefined,100
// demo: f demo(){},
// f:123,
// AO: e: undefined,f e(){},2
// b: undefined,
// c: undefined , f c(){},
// a: undefined , 10
// 2,
// undefined,
// undefined
// 10,
// 100,
// 123
例5.
持续更新ing。。。