JavaScript Function
发布时间:2023-03-08 13:28:28 所属栏目:教程 来源:
导读:Function 构造函数创建一个新的 Function 对象。直接调用此构造函数可用动态创建函数,但会遭遇来自 eval 的安全问题和相对较小的性能问题。
Function 可以用来创建函数,JavaScript 中的所有函数,都是 Function
Function 可以用来创建函数,JavaScript 中的所有函数,都是 Function
Function 构造函数创建一个新的 Function 对象。直接调用此构造函数可用动态创建函数,但会遭遇来自 eval 的安全问题和相对较小的性能问题。 Function 可以用来创建函数,JavaScript 中的所有函数,都是 Function对象。 1. 使用 Function 创建函数 Function 在被当作构造函数调用的时候,可以用来创建函数。 var fn = new Function(函数参数, 函数参数, ..., 函数参数n, 函数体); 函数体是一个字符串,字符串的内容是就是函数调用时候被执行的语句。 var fn = new Function('a', 'b', 'return a + b'); var result = fn(, ); console.log(result); // 输出:4 将上面创建函数的方式“翻译”成常用的创建方式可以是: var fn = function(a, b) { return a + b; }; var result = fn(, ); console.log(result); // 输出:4 对比一下就很好理解使用 new Function 时候所传递的参数的含义了。 2. 与常规方式创建函数的区别 这里指的常规方式是指函数声明、函数表达式或 ES6 中的箭头函数。 使用 Function 创建的函数,最后一个参数,即函数体内在执行的时候作用域是在全局的。 var num = ; function fn() { var num = ; var func = new Function('console.log(num)'); console.log(num); func(); } fn(); // 输出: // 10 // 20 这个例子在执行后,依次输出了 10 ,20 ,根据结果可以知道 new Function 创建的函数,在执行过程中,上层作用域是顶级的全局作用域,在浏览器下即为 window 。 3. 使用场景 使用 Function 来创建函数是比较麻烦的,照道理讲不会有小伙伴会喜欢用这种方式创建函数。 Function 的使用主要场景与 eval 类似,用于动态的运行代码。 如在线的代码解析器就可以配合 Function 完成。 var run = function(code, callback) { window._callback = callback; var fn = Function(code + ';_callback()'); fn(); }; run('console.log("动态执行的代码");', function() { console.log('代码执行后做的事'); }); 这样就可以实现简单的动态运行代码。 注意:真正需要完成这个功能需要大量的细节处理,如处理输出,处理异步,绝非这么简单。 还有一些代码编译工具会将编译后的代码,使用 new Function 进行包裹,如以下代码: var number = ; var flag = false; console.log(number, flag); 上面这份代码在经过编译后可能会变成: (new Function('console.log(1,!1)'))() 这样做是为了缩短代码,另外就是让格式化工具无法很好的格式化代码。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |