函数是否应该避免声明在函数中?
一个函数执行完成后其运行环境会被 GC 那么在其内声明的函数也会被 GC 掉吧(排除闭包情况)
那么下次再用时 嵌套函数会被重新声明 这是不是种浪费
如果函数不常用到还好 被释放掉还会节省内存 常用这种操作会不会造成多余的性能开销呢?~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
一个函数执行完成后其运行环境会被 GC 那么在其内声明的函数也会被 GC 掉吧(排除闭包情况)
那么下次再用时 嵌套函数会被重新声明 这是不是种浪费
如果函数不常用到还好 被释放掉还会节省内存 常用这种操作会不会造成多余的性能开销呢?~
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
其实呢,如果你写过编译器就知道了。
解析器在第一次解析的时候可以缓存解析结果(如果写在外面就一直不能释放解析结果),解析器可以选择保存解析结果或是从重新解析。
在
JS
里,一个函数其实算是一个对象,例如{args:arglist,code:code,closure:closure}
args 是形参列表,code 是函数体,closure 是执行环境,是闭包。。。其他的东西就先省略了。。。这里面code
是不变的,args
是不变的,不用每次重新解析。 实现的时候可以固定这一部分的值,每次需要“函数对象”的时候,把函数对象的对应属性指向这些值,只是需要重置 closure 而已。在js中有一种函数声明在函数中的方式叫闭包,有兴趣了解可以了解阮老师的博客http://www.ruanyifeng.com/blo...
其实题主心应该更高一点,比如看到这个一下子让我想起的 JavaScript Module,还不如好好关心一下它。
现代浏览器已经足够聪明来应付你的疑虑!
视情况而定 你想太多了
问题在于GC不是你想的立马会执行,他要是立马执行你的担忧就会成立,GC已经考虑到这个问题了。他设定了一定条件,满足了才会去GC的。所以执行的东西会有缓存这很合理。
是的,在es6的块级作用域中如果使用let 的方式提升声明一个函数容易出问题,如下将会报错:
具体你可以看下 ES6 块级作用域 http://es6.ruanyifeng.com/#do...
不要想太多细节上的开销,这也是新手常常犯的错误。先把大局上的架构优化弄明白才是正道