[问题] js闭包的基础观念疑问

楼主: paul09253336 (paulma)   2020-01-05 10:55:19
大家好,小弟刚接触js不久,目前正在利用网络平台学习,课程正好教到闭包并解释了基
本原理,讲师举了一个function例子,如下
function greet(word)
{
return function(name){
console.log(word+ ' '+name);
}
}
var sayhi=greet('hi');
sayhi('paul');
在讲师的讲解中说当程式执行到
var sayhi=greet('hi'); 时
此时js会建立一个execution context,
而word这个变量则会储存在
function greet的execution context中
当function greet执行完毕,便会离开execution stack
而在一般状况js会透过garbage collection清除变量内容,但在抽离当下变量还是储存在
内存中,所以之后才能继续使用到这个变量
但我听完后有点疑问,目前我的理解是在function执行完毕当下,garbage collection会
执行清除变量内容,所以在function greet执行完,word的这个变量应该就跟着清除了,
但现在看起来并不是这么一回事,所以想请问js的garbage collection是在什么时候会执
行?还是是js在遇到闭包时会自动不执行garbage collection?
希望各位高手能够解答小弟的疑惑
作者: ccvs (kisS x Sis)   2020-01-05 13:36:00
作者: b85040312 (万年newman)   2020-01-09 15:47:00
因为还用得到 所以不清除

Links booklink

Contact Us: admin [ a t ] ucptt.com