[英]Javascript memory implication of nested arrow functions
考虑:
function f1() {
function n11() { .. lots of code .. };
const n12 = () => { .. lots of code .. };
return n11()+n12()+5;
}
const f2 = () => {
function n21() { .. lots of code .. };
const n22 = () => { .. lots of code .. };
return n21()+n22()+5;
}
我试图理解调用f1和f2的内存含义。
关于n11, 这个答案说:
对于一些非常小且通常无关紧要的“浪费”的价值。 JavaScript引擎现在效率很高,可以执行各种技巧/优化。 例如,只有函数对象(但不是实际的函数代码!)需要在内部“复制”。 没有显示其他情况的实际测试用例,没有“浪费”问题。 这个成语(嵌套和匿名函数)在JavaScript中很常见,并且非常优化。
但是我想知道这是否也适用于箭头函数(即n12,n21和n22)..开销只是如上所述的函数对象,还是每次调用f1 / f2时都会复制整个嵌套函数代码?
谢谢!
对于在同一函数的不同闭包之间共享代码而言,一个实现在箭头函数上需要做的事情与传统函数不同。 箭头函数和传统函数之间的唯一区别是箭头函数保存this
值。 这可以使用与已为Function.prototype.bind()
方法提供的机制相同的机制来完成。 箭头函数大多只是语法糖。
func = () => { body };
大致相当于:
func = function() { body }.bind(this);
(这是一个轻微的简化,因为箭头函数也没有获得arguments
对象,但这不应该影响你所要求的。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.