js作用域链与闭包

谈闭包先谈作用域链

js作用域包含 全局 和 函数 作用域(es5)
如:

var a = 'global var'
function fn(){
	var b = 'function var';
	var n = function(){
		var c = 'inner function var'
	}
}
c //; undefined

使用文氏图描述当前作用域划分
文氏图描述当前作用域

闭包可用于突破作用域链

如果要在全局作用域访问内部函数的c变量 需要使用闭包将其与全局作用域相连

var a = 'global var'
function fn(){
	var b = 'function var';
	var n = function(){
		var c = 'inner function var'
		return c;
	}
	return n();
}
c = fn();
c;//  'inner function var'

闭包与GC

js gc 采用 引用计数
我认为 闭包就是利用了 引用计数 特点,使得 局部作用域的变量引用+1 无法释放

猜你喜欢

转载自blog.csdn.net/weixin_42043407/article/details/121401336