2014-02-23 66 views
0

如何在javascript中动态创建函数,但变量是“动态硬编码”(?)。最好不要使用eval()在JavaScript函数中动态创建静态变量

我认为这将是最简洁的方式来传递async.parallel()几个参数在nodejs中,而无需绑定对象。

function makeFunction(param1){ 

    return function(){ 
     alert(param1); 
    } 

} 
的console.log(makeFunction(的 “Hello World”))

实际输出;

return function(){ alert(param1); }

的console.log(makeFunction(的 “Hello World”))

所需的输出;

return function(){ alert("Hello World"); }

+2

你为什么要硬编码呢?它会反正因为clojure而坚持'Hello World'。如果再次使用“Bye World”再次调用它,它仍然会返回为附属于param1,但由于clojure,那里的param1会有'Bye World' –

+1

仅仅因为在输出中看不到闭合范围, param1 ===“Hello World”'。不需要在其源代码中创建一个包含字符串文字的函数,它甚至不会比闭包更高效。 – Bergi

回答

1
function makeFunction(param1){ 
    return new Function('alert(\'' + param1 + '\');') 
} 

console.log(makeFunction('helloWorld').toString()) 

只喜欢。 new Function是一个有点“evaly”,但事实上它好多了(或者更少的邪恶)。

0

我不觉得它会比使用eval更好,但很可能这将是你想要什么:

function makeFunction(param1) { 
    var F=function() { 
     alert(param1); 
    }; 

    var text=['"', '"'].join(param1); 
    text=String.prototype.replace.call(F, 'param1', text); 
    text=['return ', ';'].join(text); 
    return (new Function(text))(); 
}