Javascript 闭包的实际应用

函数即是闭包

闭包指的函数能够读取其外部环境的变量和参数的能力。JS中,一切函数都是闭包

最典型的写法

应用闭包的最典型写法,是在函数中返回另一个函数(即内函数,它有读取outer函数的变量和参数的能力)

//写法 1 返回一个匿名内函数
functin outer() {
	let varible = 0;
	return function() {
		//use varible
	}// 
}
//写法 2 返回一个有名字的内函数
functin outer() {
	let varible = 0;
	function inner() {
		//use varible
	}
	return inner;
}

调用:

let func = outer();
func();

闭包(内函数)起到的作用:

调用outer时,由outer返回一个内函数(func),由于内函数存在,外函数的变量和参数会保留在内存中为内函数所用。我们把内函数需要用到的变量定义在外函数中,有两个好处:第一,可以缩小变量的作用域,只有内函数有能力对其修改更新,避免定义在全局变量中被任何人修改;第二,每次调用外函数,变量都会缓存在内存当中,且互不干扰。接下来我们用实际应用来验证闭包这两个好处。

实际应用:计数器 Counter

普通写法:

let count = 0;
function counter() {
	count++;
	console.log(count);
}

counter(); //1
counter(); //2

闭包(内函数)写法:

function counter() {
	let count = 0;
	return function() {
		count++;
		console.log(count);
		return count;
	}
}

let counter1 = counter();
counter1(); //1
counter1(); //2
let counter2 = counter();
counter2(); //1
counter2(); //2

可以看出闭包(内函数)的写法的好处:

  1. count 定义在函数内,避免定义在了全局范围中,只能通过内函数来修改他,避免被任意修改的风险。普通写法除了 counter 函数修改,任何人都可以访问并修改 count 的值,这是十分错误的写法。
  2. counter 函数能重复使用,每次调用counter,都是一个新的计数器(count 从0开始),每个计数器的 count 值都被缓存在内存当中,且互不干扰,而这是普通写法做不到的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值