当前位置: 首页 > 面试题库 >

eval()和new Function()是同一件事吗?

卫增
2023-03-14
问题内容

这两个功能在后台执行相同的操作吗?(在单条语句中)

var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}

console.log(evaluate('2 + 1'));
console.log(func('2 + 1'));

问题答案:

不,他们 一样。

  • eval() 在当前执行范围内将字符串评估为JavaScript表达式,并且可以访问局部变量。
  • new Function()将存储在字符串中的JavaScript代码解析为一个函数对象,然后可以调用该对象。它无法访问局部变量,因为代码在单独的范围内运行。

考虑以下代码:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}

如果new Function('return (a = 22);')()使用,则局部变量a将保留其值。但是,诸如Douglas
Crockford之类的一些JavaScript程序员认为,除非绝对必要,否则都不应该使用它们,并且对不可信数据进行逃避/使用构造函数是不安全且不明智的。Function



 类似资料:
  • 问题内容: 注释和注释是否做相同的事情?我知道后者只是在Java 7中引入的。我很好奇,因为我们最近在服务器上将Java 7升级到了Java 7,所以我想知道Hibernate是否可以在任何一个注释中都起作用。 问题答案: 正如@Wundwin Born之前所说: javax.persistence.transient将确保Hibernate将忽略该特定字段并将其保存到db中,反之亦然。 java

  • 从这个留档: RxJS为JavaScript引入了一个新的Push系统。可观察对象是多个值的生产者,将它们“推送”给观察者(消费者)。 订阅可观察对象类似于调用函数。 要调用可观察对象,我们应该从可观察对象本身调用函数,并将观察者作为可观察对象提供的数据的使用者传递,如: 本文件还说明: 什么是观察者?观察者是被观察者所传递价值的消费者。观察者只是一组回调,每个回调对应于被观察者发送的每种类型的通

  • 在我的计算机科学课上浏览LinkedList java类,我想知道是否声明与

  • 它可能会引起某人的兴趣并节省几个小时,这是一个令人讨厌的捆绑问题,eval来自一个文件,函数来自第二个文件。 将导致:未捕获的类型错误:评估(...)不是一个函数 这就是解决办法 缺少分号,我在JS optional中读了几遍该分号。 为什么eval不是此上下文中的函数?

  • 本文向大家介绍C#中的委托是什么?事件是不是一种委托?事件和委托的关系。相关面试题,主要包含被问及C#中的委托是什么?事件是不是一种委托?事件和委托的关系。时的应答技巧和注意事项,需要的朋友参考一下 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的指针。 委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实

  • 在Java,我被要求将整数值存储在单链列表中,然后打印存储在列表中的元素。下面是我想出的: 我想知道,ArrayList和单链表是一回事吗?我要确保我答对了这个问题。这有道理吗?谢谢!