大家好,小弟刚接触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?
希望各位高手能够解答小弟的疑惑