一个函数执行完成后其运行环境会被 GC 那么在其内声明的函数也会被 GC 掉吧(排除闭包情况)
那么下次再用时 嵌套函数会被重新声明 这是不是种浪费
如果函数不常用到还好 被释放掉还会节省内存 常用这种操作会不会造成多余的性能开销呢?~
一个函数执行完成后其运行环境会被 GC 那么在其内声明的函数也会被 GC 掉吧(排除闭包情况)
那么下次再用时 嵌套函数会被重新声明 这是不是种浪费
如果函数不常用到还好 被释放掉还会节省内存 常用这种操作会不会造成多余的性能开销呢?~
是的,在es6的块级作用域中如果使用let 的方式提升声明一个函数容易出问题,如下将会报错:
{
var fuc ;
let fuc = function(){
}
}
// Uncaught SyntaxError: Identifier 'fuc' has already been declared
具体你可以看下 ES6 块级作用域 http://es6.ruanyifeng.com/#do...
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
其实呢,如果你写过编译器就知道了。
解析器在第一次解析的时候可以缓存解析结果(如果写在外面就一直不能释放解析结果),解析器可以选择保存解析结果或是从重新解析。
在
JS
里,一个函数其实算是一个对象,例如{args:arglist,code:code,closure:closure}
args 是形参列表,code 是函数体,closure 是执行环境,是闭包。。。其他的东西就先省略了。。。这里面code
是不变的,args
是不变的,不用每次重新解析。 实现的时候可以固定这一部分的值,每次需要“函数对象”的时候,把函数对象的对应属性指向这些值,只是需要重置 closure 而已。