闭包——嵌套函数

function outer(){  //作用域1  window
			var i = 1;  //2
			return function() {//2
				console.log(i++); //3
			}
		}
		/*
			outer {
				i:1;
				function:匿名函数
			}
			出栈顺序:
			1、outer释放不了,内层函数不让释放; v(window)不让内层函数释放  闭包
			2、闭包是如何形成的:外层函数的作用域无法释放
		 */
		//这里最重要的就是要理解内外层函数什么时候才会释放,什么时候还没有被释放  内层如果未被释放,则外层也不会释放,释放顺序就是这样:先释放内部,后释放外面一层。
		//v的作用域可以捕获到i,window不可以
		var v = outer(); //这里返回一个函数,这个内层函数没有被释放,所以外层函数没有被释放
		console.log(v); //这里的输出表明外层函数调用后内层函数并没有被立即释放,所以外层函数没有被释放
		v(); //因为没有被释放,所以i还没有被释放  结果:1
		v(); //因为没有被释放,所以i没有被释放  结果:2
		//...
		//最后需要释放outer()函数吧

### Python 嵌套函数的使用场景和示例 #### 定义与作用域 在 Python 中,可以在一个函数内部定义另一个函数,这种结构称为嵌套函数嵌套函数拥有自己独立的作用域,同时也能够访问外部函数中的局部变量[^1]。 ```python def outer_function(x): def inner_function(y): # 这是一个嵌套函数 return x + y result = inner_function(5) return result ``` 在这个例子中 `inner_function` 是 `outer_function` 的一部分,它可以直接访问参数 `x` 而无需将其作为自己的参数传递进来。 #### 实际应用场景 ##### 场景一:封装逻辑细节 当某个特定功能仅用于辅助主函数完成任务而不对外公开时,可以将其实现为嵌套函数。这样不仅提高了代码可读性和维护性,还避免了不必要的全局命名空间污染。 ```python def calculate_total_price(items, tax_rate=0.0825): def apply_tax(price): return price * (1 + tax_rate) total = sum([apply_tax(item['price'] * item['quantity']) for item in items]) return round(total, 2) ``` 这里 `apply_tax()` 只服务于计算总价的过程,在其他地方不会被调用到,因此非常适合以内置方式实现。 ##### 场景二:创建闭包 利用嵌套函数还可以构建闭包——即返回一个新的函数对象给外界使用的同时保留住当前环境下的状态信息。 ```python def make_multiplier(factor): def multiplier(number): return factor * number return multiplier double_it = make_multiplier(2) triple_it = make_multiplier(3) print(double_it(5)) # 输出 10 print(triple_it(5)) # 输出 15 ``` 上述代码片段展示了如何通过闭包机制让不同实例化的 `multiplier` 记住了各自不同的倍数因子 `factor` 并持续生效于后续的操作之中[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值