什么情况会触发闭包:
当多个函数嵌套,里面的函数执行被保存到了外面函数的外面(全局)
里面的函数在执行时任然可以调用原来它在的那个函数的变量
function test() {
var temp = 100;
function a() {
console.log(temp);
}
return a;
}
var demo = test();
demo();
var demo;
function test() {
var abc = 100;
function a() {
console.log(abc);
}
demo = a;
}
test();
demo();
var count = 0;
function test() {
count++;
console.log(count);
}
test();
test();
test();
function add() {
var num = 0;
function a() {
console.log(++num);
}
return a;
}
var myAdd = add();
myAdd();
myAdd();
myAdd();
栗子
function test() {
var food = 'apple';
var obj = {
eatFood: function() {
if (food != "") {
console.log("i am eating " + food);
food = '';
} else {
console.log("There is nothing! empty!");
}
},
pushFood: function(myFood) {
food = myFood;
}
}
return obj;
}
var person = test();
person.eatFood();
person.eatFood();
person.eatFood('banana');
person.eatFood();
栗子2
function test(){
var arr=[];
for(var i=0;i<10;i++){
arr[i]=function (){
console.log(i);
}
}
return arr;
}
var myArr=test();
for(var j=0;j<10;j++){
myArr[j]();
}
立即执行函数
var num = (function(a, b) {
return a + b;
}(1, 2))
//(立即执行函数
var num = (function(a, b) {
return a + b;
}(1, 2))
(function(){
}());
(function(){
})();
// 只有表达式才能被执行
function test(){
}
test();
// 一旦一个表达式被执行之后它就失去了对函数的索引(失去了定义这个函数的功能)
var demo=function(){
console.log('a');
}()