当我指定一个函数作为参数时,console.log()返回undefined
console.log() returns undefined when I specify a function as its argument
我正在尝试为学生制作一个网站,允许他们输入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输出时,传递的值正确显示,'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是邪恶的!!"注释:这是eval实际上是适当选择的少数情况之一。new Function()
也用另一个名字来表示。当然,您至少需要 try..catch来捕获输入中的语法错误。
下面是Function()
的构造函数:
new Function ([arg1[, arg2[, ...argN]],] functionBody);
代码的问题在于函数体。对于您提供的样品,结果如下:
(function( a ) {
function foo(str) {
return false;
}
})( args );
正确返回undefined,因为外部函数没有返回任何东西,尽管内部函数返回了。
JSFIDDLE演示根据这里给出的的例子,函数体不应该已经是一个函数,除非你打算在外部(新函数)中调用它:
<<p> JSFIDDLE演示/strong>//示例可以直接在JavaScript控制台中运行
//创建一个函数,接受两个参数并返回var adder = new Function("a", "b", "return a + b");
//调用函数adder(2,6);//> 8
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- JavaScript 窗口['func'],参数返回 undefined 而不是函数
- JavaScript函数中名为“undefined”的参数的目的是什么?
- 通过JavaScript/jQuery使用参数来强调HTML输入的值会返回undefined
- Can't .join()函数参数- TypeError: undefined不是函数
- 作为参数传递的JavaScript函数类型返回undefined
- 为什么使用'undefined'作为jQuery函数的第二个参数
- 当我指定一个函数作为参数时,console.log()返回undefined
- 函数参数为Null或Undefined'当它被提供时
- 省略函数参数的更短的方法就是写出undefined
- Angular: ng-click参数是undefined,它在ng-repeat中
- 下一个参数是'undefined'在jQuery中,为什么
- 通过Javascript传递带参数的变量:什么是undefined