/* function foo(){
var a = 10;
function bar(){ //这个函数叫做闭包
console.log(a);
}
} */
/* function foo(){
var a = 10;
return function(){
console.log(a);
};
}
//return出来的是一个函数表达式,可以在后面接小括号直接调用
foo()(); // 10 利用闭包可以在函数外部进行调用。 */
/* var foo = function(){
var a = 10;
return function(){
console.log(a);
};
}();
foo(); */
//闭包的好处,防止变量冲突
/*
var foo = function(){
var a = 10;
a++;
console.log(a);
};
foo();
foo();
foo();
var a = 20; */
//我想让a即累加,又是一个局部变量。闭包可以做到
/* var foo = function(){
var a = 10;
return function(){
a++;
console.log(a);
};
}();
foo();
foo();
foo();
var a = 20; */
//匿名函数自执行
// var foo = function(){}();
// function bar(){}();
/* function(){ //默认情况下,程序认为没有名字的函数是函数声明写法
console.log(123);
}(); */
/* (function(){ // 可以转成表达式
console.log(123);
})(); */
// +function(){ // 可以转成表达式
// console.log(123);
// }();
// ~function(){ // 可以转成表达式
// console.log(123);
// }();
// !function(){ // 可以转成表达式
// console.log(123);
// }();