我在MDN文档上偶然发现了关于Function的消息
函数构造函数创建一个新的函数对象。直接调用构造函数可以动态地创建函数,但是会受到安全性和类似(但远不重要)的性能问题的影响。但是,与eval不同,函数构造函数创建的函数仅在全局范围内执行。
有人能解释一下什么是函数构造函数吗?或者说,有人能事先解释一下我的上述说法吗?
发布于 2020-03-29 19:16:32
这实际上意味着new Function('...')和eval('...')以类似的方式工作,也就是说,它们将把参数中的字符串计算为JS表达式。然而,它们有不同的范围界定规则:
new Function()只能访问全局范围。eval()可以访问本地范围。一个例子是:
f,它是new Function('console.log(x)'),然后调用它。无论调用哪个作用域f(),它总是在全局范围上记录x的值。eval('console.log(x)')。x的值取决于eval()在以下范围内的作用域:
const x = 'global x';
const f = new Function('console.log(x)');
f(); // logs 'global x'
eval('console.log(x)'); // logs 'global x'
// Let's create a function scope
function test() {
const x = 'local x';
const f = new Function('console.log(x)');
f(); // logs 'global x'
eval('console.log(x)'); // logs 'local x';
}
test();
https://stackoverflow.com/questions/60919433
复制相似问题