function y(fct) {
var a = 2;
var fctStr = String(fct);
var fct1 = eval(fctStr);
console.log("fctStr=" + fctStr); // output: fctStr=function x() { return a + 1 }
console.log("fct1=");
console.log(fct1); // output: undefined. Why it is undefined? I expect fct1 is a function.
return fct1(); // exception: undefined is not a function.
}
function x() { return a + 1 }
y(x) // I expect it returns 3. However, it throws exception at above "return fct1()" statement.
Chrome中的此代码将fct1
作为undefined
。为什么?我希望fct1
是一个函数。
为什么要问这个问题的原因是:How to write function-y accepting parameter-fct_x which accesses var-a which is required to be defined in function-y?
答案 0 :(得分:5)
您需要制作一个表达式。
更改
var fct1 = eval(fctStr);
到
var fct1 = eval("("+fctStr+")");
答案 1 :(得分:0)
其他人已经回答了一些问题,但这里是答案:
function x() {return a + 1}
它定义了一个名为x
的函数,这与以下内容非常类似:
var x = function() {return a + 1}
在这种情况下,会创建一个匿名函数并将其分配给变量x
。因此,如果您想为变量分配函数,则不应该是function
和()
之间的标识符。
如果您希望eval
语句返回该函数,则需要用括号包装函数声明(并且不给出功能名称)。 编辑:功能名称是可选的:
var x = eval('(function () {return a + 1})');