正在回答 回答被采纳积分+1
3回答
好帮手慕久久
2020-12-19 18:55:32
同学你好,问题解答如下:
1、在同学的例子中nAdd和f2一样,都能形成闭包,只是二者保存下来的作用域是同一个。可以将函数改成如下形式:
在上图的例子中,调用两次nAdd,结果分别是1000、1001,就证明了第一次调用nAdd时,f1的作用域是没有被销毁的,否则第二次调用nAdd,不会得到1001。第一次调用nAdd后,f1内的n变成了1000,由于f1没有被销毁,所以第二次调用nAdd时,会继续操作f1中的变量n,将其由1000变成1001。
2、闭包的本质是:函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域(重点),形成一个封闭的作用域。nAdd是函数f1内的子函数(理解成变量也行),由于它在全局作用域中的被使用(全局作用域内的变量不会被销毁),所以nAdd不会被销毁,从而让f1形成的作用域也不会销毁,这样就符合了闭包的本质,因此是一个闭包。
关于闭包,同学目前只需要重点理解f2那种固定的形式即可,对于特殊的闭包,可以在有了实际经验之后,再回头理解,有了经验后,理解会更容易些,不要着急。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星