我有一个代码字符串,我已经在其他地方使用Blockly为我创建了代码字符串。它让我觉得它是正确的,当我直接回到页面时:
function someName(){
//some code
}
//more code
someName();
但是,当我调用eval时,函数调用本身不起作用。它声称该功能未定义。除了函数声明之外的所有东西都在工作。代码字符串本身已设置,除非我进行大量解析,否则我无法对其进行更改。是否有一些更简单的方法来声明这些函数,以便代码可以调用它们?
测试用例(我实际使用过):
function test(){
alert("This is a test");
}
test();
答案 0 :(得分:1)
eval
在非常特殊的环境中工作,这在许多方面与本地范围非常相似。因此,如果您在函数中对该字符串调用eval
,则someName
函数将仅在该函数中声明,例如:
function doSomething(str) {
eval(str);
snippet.log(typeof someName); // "function"
}
doSomething("function someName() { }");
snippet.log(typeof someName); // "undefined"

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
如果你想要全局宣布它,你必须做一些工作。 Kangax wrote up an excellent discussion of the options for&#34; global eval
&#34;。其中一个选项是David Flanagan建议的那个:
var geval = this.execScript || eval;
然后使用geval
。这是因为IE具有execScript
,它在全局范围内工作,而在其他浏览器通过引用它的变量间接调用eval
使其在全局范围内工作。但请阅读文章了解更多详情和选项。
function doSomething(str) {
var geval = this.execScript || eval;
geval(str);
snippet.log(typeof someName); // "function"
}
doSomething("function someName() { }");
snippet.log(typeof someName); // "function"
&#13;
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;