首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数构造函数与eval函数

函数构造函数与eval函数
EN

Stack Overflow用户
提问于 2020-03-29 19:09:18
回答 1查看 346关注 0票数 0

我在MDN文档上偶然发现了关于Function的消息

函数构造函数创建一个新的函数对象。直接调用构造函数可以动态地创建函数,但是会受到安全性和类似(但远不重要)的性能问题的影响。但是,与eval不同,函数构造函数创建的函数仅在全局范围内执行。

有人能解释一下什么是函数构造函数吗?或者说,有人能事先解释一下我的上述说法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()在以下范围内的作用域:

代码语言:javascript
复制
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();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60919433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档