函数是否应该避免声明在函数中?

发布于 2022-09-06 04:05:39 字数 132 浏览 32 评论 0

一个函数执行完成后其运行环境会被 GC 那么在其内声明的函数也会被 GC 掉吧(排除闭包情况)
那么下次再用时 嵌套函数会被重新声明 这是不是种浪费
如果函数不常用到还好 被释放掉还会节省内存 常用这种操作会不会造成多余的性能开销呢?~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

想你只要分分秒秒 2022-09-13 04:05:39

其实呢,如果你写过编译器就知道了。

解析器在第一次解析的时候可以缓存解析结果(如果写在外面就一直不能释放解析结果),解析器可以选择保存解析结果或是从重新解析。

JS里,一个函数其实算是一个对象,例如 {args:arglist,code:code,closure:closure} args 是形参列表,code 是函数体,closure 是执行环境,是闭包。。。其他的东西就先省略了。。。这里面code是不变的,args是不变的,不用每次重新解析。 实现的时候可以固定这一部分的值,每次需要“函数对象”的时候,把函数对象的对应属性指向这些值,只是需要重置 closure 而已。

荒岛晴空 2022-09-13 04:05:39

在js中有一种函数声明在函数中的方式叫闭包,有兴趣了解可以了解阮老师的博客http://www.ruanyifeng.com/blo...

眸中客 2022-09-13 04:05:39

其实题主心应该更高一点,比如看到这个一下子让我想起的 JavaScript Module,还不如好好关心一下它。

现代浏览器已经足够聪明来应付你的疑虑!

北笙凉宸 2022-09-13 04:05:39

视情况而定 你想太多了

冷清清 2022-09-13 04:05:39

问题在于GC不是你想的立马会执行,他要是立马执行你的担忧就会成立,GC已经考虑到这个问题了。他设定了一定条件,满足了才会去GC的。所以执行的东西会有缓存这很合理。

暗喜 2022-09-13 04:05:39

是的,在es6的块级作用域中如果使用let 的方式提升声明一个函数容易出问题,如下将会报错:

{
    var fuc ;
    let fuc = function(){
    }
}
// Uncaught SyntaxError: Identifier 'fuc' has already been declared 

具体你可以看下 ES6 块级作用域 http://es6.ruanyifeng.com/#do...

染柒℉ 2022-09-13 04:05:39

不要想太多细节上的开销,这也是新手常常犯的错误。先把大局上的架构优化弄明白才是正道

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文