JavaScript闭包

闭包应用的两种情况即可——函数作为返回值,函数作为参数传递。

闭包:函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性称为闭包。

//函数作为返回值  输出15
function fn(){
	var max = 10;
	return function bar(x){
		if(x > max){
			console.log(x);
		}
	};
}
var f1 = fn();
f1(15);
//执行f1(15)时,用到了fn作用域下的max变量的值




//函数作为参数被传递  输出15
var max=10;
var fn = function(x){
	if(x > max){
		console.log(x);
	}
};
(function(f){
	var max = 100;
	f(15);

})(fn);
//fn函数作为一个参数被传递进入另一个函数,执行f(15)时,max变量的取值是10,而不是100

自由变量作用域:输出 10

要到创建这个函数的那个作用域中取值——是“定义”,而不是“调用”,切记切记——其实这就是所谓的“静态作用域”。

var x = 10;
function fn(){
	console.log(x);
}
function show(f){
	var x = 20;
	(function(){
		f();
	})();
}
show(fn);
  • 找到 x = fn() ,调用fn,函数返回值为函数bar ,bar中a +b,a不在bar函数作用域中,在创建/定义bar()的作用域找a,没有,继续在创建fn()的作用域中找,存在a = 10;b不在bar作用域中,在定义bar()的作用域(即fn())中查找 ,找到b=20,输出 a+b=30.
var a= 10;
function fn(){
	var b = 20;
	function bar(){
		console.log(a + b);
	}
	return bar;
}
var x = fn(),b=200;
x();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值