- 引用了自由变量的函数
- 函数+它自己引用的变量=闭包
//定义了一个外层函数
function foo(x){
var tmp = '3'; //定义了一个局部变量
return function(y){ //把一个函数作为返回值返回
console.log(x+y+(++tmp));
// 可访问以下内容自己有的y 父级的tmp、x 顶级的bar
}
}
//调用foo方法执行,并把返回的函数给了bar变量
var bar = foo(2);
//bar是一个全局变量,此时bar指向匿名函数,所以bar是个闭包-
//-闭包体是匿名函数+x+tmp(x、跟tmp是父级的)
bar(10);
bar(20);
//常规写法
var t = function (a){
console.log(a);
};
t(9);
//尽量避免定义全局变量,容易造成命名冲突
//自执行函数写法
(function(a){ //模拟块级作用域名
console.log(a);
})(9)
//匿名自执行函数
(function(a1){
//模拟块级作用域
var m = 10;
console.log(a1);
console.log(m);
})(8);
网友评论