Maison interface Web js tutoriel 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);'))();
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que signifie eval en python ? Que signifie eval en python ? May 22, 2019 pm 03:18 PM

eval signifie « évaluation » et est une fonction intégrée à Python qui est utilisée pour exécuter une expression de chaîne et renvoyer le résultat du calcul de l'expression ; c'est-à-dire que lors de l'attribution d'une variable, la représentation à droite du signe égal est ; écrite sous le format d'une chaîne, La valeur de retour est le résultat de cette expression. Syntaxe "eval(expression[, globals[, locaux]])".

Comment désactiver eval en php sous Win Comment désactiver eval en php sous Win Oct 31, 2022 am 09:33 AM

Comment désactiver eval en PHP sous win : 1. Téléchargez « PHP_diseval_extension » ; 2. Recherchez le PHP actuellement utilisé par le serveur ; 3. Ouvrez le fichier de configuration PHP ; 4. Ajoutez le code « extension=diseval.so » ; Redémarrez le service.

Une explication simple de l'utilisation de eval en python Une explication simple de l'utilisation de eval en python Mar 25, 2024 pm 02:08 PM

En Python, la fonction eval() est utilisée pour exécuter une expression de chaîne et renvoyer son résultat. Il prend une chaîne contenant une expression comme paramètre et évalue l'expression. La fonction eval() est puissante, mais il convient de noter qu'elle exécutera toute expression Python valide contenue dans la chaîne, vous devez donc éviter d'accepter des chaînes d'entrée externes lorsque vous l'utilisez pour éviter les failles de sécurité.

qu'est-ce qu'eval en python qu'est-ce qu'eval en python Aug 08, 2023 pm 05:07 PM

eval est une fonction intégrée à Python qui est utilisée pour analyser et exécuter des chaînes sous forme de codes et renvoyer les résultats de l'exécution. Étant donné que la fonction « eval » peut exécuter du code Python arbitraire, vous devez examiner attentivement les problèmes de sécurité lorsque vous utilisez la fonction « eval ». Si vous transmettez une chaîne non fiable à la fonction « eval », cela peut entraîner des problèmes de sécurité tels que l'injection de code. .

Comment utiliser la fonction d'évaluation Python Comment utiliser la fonction d'évaluation Python Jun 04, 2023 am 09:19 AM

eval() de Python Nous pouvons utiliser le Pythoneval()[1] intégré pour évaluer dynamiquement des expressions à partir d'une entrée basée sur une chaîne ou basée sur un code compilé. Si nous transmettons une chaîne à eval(), alors la fonction l'analyse, la compile en bytecode[2] et l'évalue comme une expression Python. Mais si nous appelons eval() avec un objet code compilé, alors la fonction effectue uniquement l'étape de calcul, ce qui est très pratique si nous appelons eval() plusieurs fois avec la même entrée. eval() de Python est défini comme suit. eval(expression[,globals[,locals]]) cette fonction

Comment utiliser le nouveau mot-clé en Java Comment utiliser le nouveau mot-clé en Java May 03, 2023 pm 10:16 PM

1. Concept Dans le langage Java, l'expression "nouvelle" est responsable de la création d'une instance, dans laquelle le constructeur est appelé pour initialiser l'instance ; le type de valeur de retour du constructeur lui-même est vide, et non "le constructeur renvoie la nouvelle expression créée". Référence d'objet", mais la valeur de la nouvelle expression est une référence à l'objet nouvellement créé. 2. Objectif : créer un objet d'une nouvelle classe. 3. Mécanisme de travail : allouer de l'espace mémoire aux membres de l'objet et spécifier les valeurs par défaut. Initialiser explicitement les variables des membres, effectuer des calculs de méthode de construction et renvoyer souvent des valeurs de référence. signifie en ouvrir de nouveaux en mémoire. L'espace mémoire est alloué dans la zone de tas de la mémoire. Il est contrôlé par jvm et gère automatiquement la mémoire. Ici, nous utilisons la classe String comme exemple. Pu

Quelle est la différence entre make et new dans le langage go Quelle est la différence entre make et new dans le langage go Jan 09, 2023 am 11:44 AM

Différences : 1. Make ne peut être utilisé que pour allouer et initialiser des données de types slice, map et chan, tandis que new peut allouer n'importe quel type de données. 2. La nouvelle allocation renvoie un pointeur, qui est le type "*Type" tandis que make renvoie une référence, qui est le Type. 3. L'espace alloué par new sera effacé ; une fois que make aura alloué l'espace, il sera initialisé.

See all articles