浅识js中的闭包

闭包是什么?特点是什么?

闭包是指有权利访问另一个函数作用域中变量的函数;

  1. 是一个函数
  2. 能访问另外一个函数作用域中的变量
function fn() {
  var a =  20
  return function () {
  	console.log(a)
  }
}

让这个局部变量a像全局变量一样,不被垃圾回收机制所回收,一直在内存中,( js垃圾回收机制也就是当一个函数被执行完后,其作用域会被回收。如果形成闭包,执行完后其作用域就不会被回收。) 如果某个函数被他的父函数之外的一个变量应用,就会形成闭包。这是形式中的闭包(表面的理解).
一、特点:

  1. 闭包可以访问当前函数以外的变量;
  2. 即使外部函数已经返回,闭包仍能访问外部函数定义的变量。
  3. 闭包可以更新外部变量的值。

典型闭包写法:

// 第一种
function fn1() {
	var num = 100
	function fn2 () {
		console.log( str + num ) // 访问外部的num
	}
	return fn2(' 数字是: ')
}
	fn1()

// 第二种
function fn1() {
	var num = 100
	function fn2 (str) {
		console.log( str + num ) // 访问外部的num
	}
	return fn2 // 外部函数返回值
}
	var res = fn1()
	res('数字是:')
 	res('数字不是:')
 
 // 第三种
 function fn1() {
	var count = 100
	function fn2 (val) {
		count = val
		console.log( count )
	}
	return fn2 // 外部函数返回值
}
	var count = fn1()
	count(111)
 	count(222)

二、基础知识铺垫:
要想看懂闭包,必须要有以下基本功作为铺垫;
研究闭包这个现象的资格要具备以下几点:

  1. 高阶函数
  2. 函数作用域;
  3. 作用域链;
  4. 找原型链;
  5. js解释器的事;
  6. 浏览器的编译原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Friday--星期五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值