我理解的闭包
作为一个学过编译原理的计算机科班学生,我想谈一谈我自己对javascript中闭包的理解。
在编译原理课程的实验部分我们的要求是实现一个SYSY编译器(一个简化版本的C语言目标为MIPS/LLVM代码),实验的一个重要部分就是实现函数调用。在MIPS实现函数调用中比较重要的部分就是传参,前4个参数我们会利用寄存器传参,后面的参数会通过栈帧来传参(将参数压栈),不管怎样,函数调用返回后就会弹栈。
但是在C语言中函数中是不允许返回一个函数的,而在javascript中可以返回一个函数。
正常的情况下,如果返回正常值,那么函数中的局部变量就会直接在弹栈中丢掉了,但是在javascript中你又返回了一个函数那么需要将新的函数压栈,在这个过程中压栈肯定不能丢掉对一些局部变量的引用,同时注意每次调用原函数的局部变量都是重新产生的,也就是在内存中每个闭包函数引用的变量是不同的(如果都是同一个变量我想也不会存在内存泄漏的问题了吧)。
1 |
|
上面的代码输出的结果为:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Q9-K's Blog!
评论