JavaScript-闭包

闭包

闭包

  • (什么是闭包):
    • 函数作为参数被传递(函数套函数)
    • 函数作为返回值被传递(函数套函数)
  • 闭包的作用:
      1. 闭包引用的变量不会被销毁,也就是可以访问
      1. 闭包可以实现局部变量,避免全局变量污染
  • 总结:
    • 闭包也是变量作用域的特殊情况:
    • 在变量定义的地方就开始了查找赋值,而不是在函数执行的地方开始查找赋值

函数作为返回值被传递

  • 总结:
    • 被闭包引用的局部变量,不会被销毁
    • 闭包可以实现局部变量,避免全局变量污染
function fun() {
	var a = 100;
	return function() {
		console.log(a);
		a++;
	}
}
var f = fun();
f();	// 100 函数作为返回值被调用
f();	// 101
- 闭包中的自由变量的值在函数定义的时候查找,不是函数执行的查找
function fun() {
	var a = 100;
	return function() {
		console.log(a);
		a++;
	}
}
var a = 20
var f = fun();
f();	// 100 闭包中的自由变量在定义的时候查找,不是在执行的时候查找
f();	// 101

函数作为参数被传递

  • 总结:
    • 闭包中执行的变量的查找在函数定义的地方
function print(fn) {
	let a = 100;
	fn();
	// 这里函数被当成了参数传递了过来,所以在这里执行了函数,形成了闭包
	// 所以不能在这里进行赋值,不能赋值100,
}
let a = 50;  // 找到了这里
function fn() {
	console.log(a);
	// 因为 fn函数定义在了这里
	// a在这个函数中是自由变量
	// 所以去上一层查找a,发现a=50,所以 print(fn) === 50
}
print(fn)	// 50
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值