作者paul09253336 (paulma)
看板Ajax
标题[问题] js闭包的基础观念疑问
时间Sun Jan 5 10:55:19 2020
大家好,小弟刚接触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?
希望各位高手能够解答小弟的疑惑
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.10.203.44 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1578192921.A.49E.html
2F:→ ccvs: ipt-closures-efficiently/index.html 01/05 13:36
3F:推 b85040312: 因为还用得到 所以不清除 01/09 15:47