Heim Web-Frontend js-Tutorial Eval and new funciton not the same thing_javascript技巧

Eval and new funciton not the same thing_javascript技巧

May 16, 2016 pm 05:45 PM
eval new

1、函数声明式

复制代码 代码如下:

function foo(){
//code
}

在JS中,函数也是对象,函数对象连接到Function.prototype( Function.prototype连接到Object.prototype)
2、函数字面量式
复制代码 代码如下:

var foo = function foo(){
//code
}

对象拥有一个连到原型对象的隐藏连接。对象字面量间生的对象连接到Object.prototype。 foo.__proto__ == Function.prototype
3、使用New的构造函数生成

new Function ([arg1[, arg2[, ... argN]],] functionBody);

每次执行都生成新的函数
网上的资料有很多介绍这三种模式的,前2种几乎是相同的,基于相同的词法作用域。

词法作用域:变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域。 with和eval除外,所以只能说JS的作用域机制非常接近词法作用域(Lexical scope)。
突然感觉有点离题了,这篇文章其实是记录eval和New Function的区别,下面回归正题:

以前有人会说,new Function的方式是几乎与eval相等,今天我查了一下,确实是不同的东西,说这句话的人太不负责了。关于eval和new function,得到的结果都是一致的,都会叫你不要去使用它们。所以结论就是“不得不”才使用。

eval() evaluates a string as a JavaScript expression within the current execution scope and can access local variables.
new Function()parses the JavaScript code stored in a string into a function object, which can then be called. It cannot access local variables because the code runs in a separate scope.
从以上2点看出,eval的作用域是现行的作用域,而new Function是动态生成的,它的作用域始终都是window。并且,eval可以读到本地的变量,new Function则不能。
复制代码 代码如下:

function test() {
var a = 11;
eval('(a = 22)'); //如果是new Function('return (a = 22);')(); a的值是不会覆盖的。
alert(a); // alerts 22
}

所以一般eval只用于转换JSON对象,new Function也有特殊的用途,只是在不清楚的情况下还是少用为妙。

更多资料:邪恶的eval和new Function

这里作个备份:

代码:
复制代码 代码如下:

// 友善提醒:为了你的手指安全,请在Chrome下运行
'alert("hello")'.replace(/.+/, eval);
'alert("hello")'.replace(/.+/, function(m){new Function(m)();});

var i = 0; eval(new Array(101).join('alert(++i);'));
var i = 0; new Function(new Array(101).join('alert(++i);'))();
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was bedeutet Auswertung in Python? Was bedeutet Auswertung in Python? May 22, 2019 pm 03:18 PM

eval bedeutet „Auswertung“ und ist eine in Python integrierte Funktion, die verwendet wird, um einen Zeichenfolgenausdruck auszuführen und das Berechnungsergebnis des Ausdrucks zurückzugeben, d. h. beim Zuweisen einer Variablen ist die Darstellung auf der rechten Seite des Gleichheitszeichens im Format einer Zeichenfolge geschrieben. Der Rückgabewert ist das Ergebnis dieses Ausdrucks. Syntax „eval(expression[, globals[, locals]])“.

So deaktivieren Sie die Auswertung in PHP unter Win So deaktivieren Sie die Auswertung in PHP unter Win Oct 31, 2022 am 09:33 AM

So deaktivieren Sie eval unter Win: 1. Laden Sie „PHP_diseval_extension“ herunter. 2. Suchen Sie das aktuell vom Server verwendete PHP. 4. Fügen Sie den Code „extension=diseval.so“ hinzu. Starten Sie den Dienst neu.

Eine einfache Erklärung der Verwendung von eval in Python Eine einfache Erklärung der Verwendung von eval in Python Mar 25, 2024 pm 02:08 PM

In Python wird die Funktion eval() verwendet, um einen String-Ausdruck auszuführen und sein Ergebnis zurückzugeben. Es nimmt eine Zeichenfolge, die einen Ausdruck enthält, als Parameter und wertet den Ausdruck aus. Die Funktion eval() ist leistungsstark, es sollte jedoch beachtet werden, dass sie jeden gültigen Python-Ausdruck ausführt, der in der Zeichenfolge enthalten ist. Daher sollten Sie bei ihrer Verwendung die Annahme externer Eingabezeichenfolgen vermeiden, um Sicherheitslücken zu vermeiden.

Was ist Eval in Python? Was ist Eval in Python? Aug 08, 2023 pm 05:07 PM

eval ist eine in Python integrierte Funktion, die verwendet wird, um Zeichenfolgen als Codes zu analysieren und auszuführen und die Ausführungsergebnisse zurückzugeben. Da die Funktion „eval“ beliebigen Python-Code ausführen kann, müssen Sie bei der Verwendung der Funktion „eval“ sorgfältig auf Sicherheitsaspekte achten. Wenn Sie der Funktion „eval“ eine nicht vertrauenswürdige Zeichenfolge übergeben, kann dies zu Sicherheitsproblemen wie Code-Injection führen .

So verwenden Sie die Python-Bewertungsfunktion So verwenden Sie die Python-Bewertungsfunktion Jun 04, 2023 am 09:19 AM

Pythons eval() Wir können das integrierte Pythoneval()[1] verwenden, um Ausdrücke aus stringbasierten oder kompilierten Code-basierten Eingaben dynamisch auszuwerten. Wenn wir einen String an eval() übergeben, analysiert die Funktion ihn, kompiliert ihn zu Bytecode[2] und wertet ihn als Python-Ausdruck aus. Wenn wir jedoch eval() mit einem kompilierten Codeobjekt aufrufen, führt die Funktion nur den Berechnungsschritt aus, was sehr praktisch ist, wenn wir eval() mehrmals mit derselben Eingabe aufrufen. Pythons eval() ist wie folgt definiert. eval(expression[,globals[,locals]]) diese Funktion

So verwenden Sie das neue Schlüsselwort in Java So verwenden Sie das neue Schlüsselwort in Java May 03, 2023 pm 10:16 PM

1. Konzept In der Java-Sprache ist der „neue“ Ausdruck für die Erstellung einer Instanz verantwortlich. Der Konstruktor wird aufgerufen, um die Instanz zu initialisieren „Objektreferenz“, aber der Wert des neuen Ausdrucks ist eine Referenz auf das neu erstellte Objekt. 2. Zweck: Erstellen Sie ein Objekt einer neuen Klasse. 3. Arbeitsmechanismus: Allokieren Sie Speicherplatz für Objektmitglieder und geben Sie Standardwerte explizit an, führen Sie Konstruktionsmethodenberechnungen durch und geben Sie häufig Referenzwerte zurück bedeutet, neue im Speicher zu öffnen. Der Speicherplatz wird im Heap-Bereich im Speicher zugewiesen. Er wird von JVM gesteuert und verwaltet den Speicher. Hier verwenden wir die String-Klasse als Beispiel. Pu

Was ist der Unterschied zwischen make und new in der Go-Sprache? Was ist der Unterschied zwischen make und new in der Go-Sprache? Jan 09, 2023 am 11:44 AM

Unterschiede: 1. Make kann nur zum Zuweisen und Initialisieren von Daten der Typen Slice, Map und Chan verwendet werden, während new jeden Datentyp zuordnen kann. 2. Die neue Zuweisung gibt einen Zeiger vom Typ „*Type“ zurück, während make eine Referenz vom Typ „Type“ zurückgibt. 3. Der von new zugewiesene Speicherplatz wird gelöscht. Nachdem make den Speicherplatz zugewiesen hat, wird er initialisiert.

See all articles