kof*_*fus 6 javascript ecmascript-6
考虑:
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;
}
Run Code Online (Sandbox Code Playgroud)
我试图理解调用f1和f2的内存含义.
关于n11,这个答案说:
对于一些非常小且通常无关紧要的"浪费"的价值.JavaScript引擎现在效率很高,可以执行各种技巧/优化.例如,只有函数对象(但不是实际的函数代码!)需要在内部"复制".没有显示其他情况的实际测试用例,没有"浪费"问题.这个成语(嵌套和匿名函数)在JavaScript中很常见,并且非常优化.
但是我想知道这是否也适用于箭头函数(即n12,n21和n22)..开销只是如上所述的函数对象,还是每次调用f1/f2时都会复制整个嵌套函数代码?
谢谢!
对于在同一函数的不同闭包之间共享代码而言,实现在箭头函数上需要做的事情与传统函数不同.箭头函数和传统函数之间的唯一区别是箭头函数保存了this值.这可以使用与已经为该Function.prototype.bind()方法提供的机制相同的机制来完成.箭头函数大多只是语法糖.
func = () => { body };
Run Code Online (Sandbox Code Playgroud)
大致相当于:
func = function() { body }.bind(this);
Run Code Online (Sandbox Code Playgroud)
(这是一个小小的简化,因为箭头函数也没有得到一个arguments对象,但这不应该影响你所要求的.)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |