请考虑以下事项:
var a = 5;
var b = function ()
{
console.log (a + 5);
};
var c = b.toString();
执行上述操作后,c
将等于:
"function ()
{
console.log (a + 5);
}"
我如何才能c
等于:
"function ()
{
console.log (5 + 5);
}"
代替?
我尝试了以下内容:
var a = 5;
var b = function ()
{
console.log ('<%a%>' + 5);
};
var c = b.toString().replace('<%a%>', a);
但上面显然使c
等于:
"function ()
{
console.log ('5' + 5);
}"
是否有其他方法可以实现此目的(javascript + RegEx)而不使用像underscore
这样的库(使用已知的template
函数)?
基本上我正在尝试提出一个简洁的函数,它将函数转换为字符串,同时将该函数中存在的所有变量(具有硬编码值)替换为各自的值,而无需使用任何变量。
由于
答案 0 :(得分:6)
您可以通过更改.replace
的第一个参数来修复代码段:
var a = 5;
var b = function ()
{
console.log ('<%a%>' + 5);
};
var c = b.toString().replace("'<%a%>'", a);
对于更通用的解决方案,您可能需要更智能的语法分析解析器。