gpt4 book ai didi

javascript - 当我指定一个函数作为它的参数时,console.log() 返回 undefined

转载 作者:行者123 更新时间:2023-11-29 21:59:51 25 4
gpt4 key购买 nike

我正在尝试为学生创建一个网站,允许他们输入 javascript、运行代码并根据预期输出测试代码。我在使用 Function() 构造函数运行从文本输入空间获取的代码时遇到了一些麻烦。

按下按钮以运行 submitcode()

  function submitcode(){
$(document).find('textarea,:text').each( function(){
var codewritten = $(this).val();
console.log(codewritten);
test(codewritten);
});
}

测试方法在这里:

  function test(inputcode){
var passed = inputcode; //code that they wrote
var args = 'pogchamp'; //this is my input that i want to test their code with
var f = new Function('a',passed);
console.log(passed);
console.log('test');
console.log(f(args));
}

当我检查 chrome 输出时,passed 的值正确显示,'test' 也是如此,而 console.log(f(args));返回未定义。

下面是传递变量的示例值,仅供引用:

   function foo(str){
return false; //auto-generated
}

谢谢,抱歉(我对 javascript 比较陌生)

最佳答案

new Function() 使用给定的内容创建一个新函数。您向它传递了一个函数声明,因此生成的函数如下所示:

function( a ) {
function foo(str){
return false; //auto-generated
}
}

...调用时不返回任何内容。 (您可以使用 console.log(f.toString()) 确认这一点)。

要修复它,您可以使用 eval() 代替:

eval( "var f = " + passed );

对于所有不可避免的“eval is evil!!”评论:这是 eval 实际上是合适选择的罕见情况之一。 new Function() 也是 eval 的另一个名字。而且,当然,您至少需要 try..catch 来捕获输入中的语法错误。

关于javascript - 当我指定一个函数作为它的参数时,console.log() 返回 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com