首页 > 解决方案 > JavaScript 的闭包参数转换(babel、traceur 等)

问题描述

寻找消除闭包的(babel、traceur 等)转换(将封闭变量转换为显式参数)

例子:

function original(){
    var sum = 0;
    var add = 1;
    var param = 2;
    var inc = (p2) => { ++add; return add + p2; }
    for(var i = 0; i < 5; i++){
        sum += inc(param);
    }
    console.log(sum);
}

输出选项 1:

// ===== GENERATED BELOW
function inc_noclo(locals, p2) {
    ++locals.add; return locals.add + p2;
}

function rewritten1(){ 
    var sum = 0;
    var locals = {add: 1}
    var param = 2;
    var inc = inc_noclo.bind(null, locals);
    for(var i = 0; i < 5; i++){
        sum += inc(param);
    }
    console.log(sum);
}

输出选项 2:

function inc_noclo(locals, p2) {
    ++locals.add; return locals.add + p2;
}

function rewritten2(){ 
    var sum = 0;
    var locals = {add: 1}
    var param = 2;
    for(var i = 0; i < 5; i++){
        sum += inc_noclo(locals, param);
    }
    console.log(sum);
}

不适合的已知实现:

适合但不适合 JS:

标签: javascriptbabeljscode-generation

解决方案


推荐阅读