Rumah hujung hadapan web tutorial js 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);'))();
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

python中eval是什么意思? python中eval是什么意思? May 22, 2019 pm 03:18 PM

eval的意思是“评估”,是python中的一个内置函数,用于执行一个字符串表达式,并返回表达式的计算结果;即变量赋值时,等号右边的表示是写成字符串的格式,返回值就是这个表达式的结果。语法“eval(表达式[, globals[, locals]])”。

Bagaimana untuk melumpuhkan eval dalam php di bawah win Bagaimana untuk melumpuhkan eval dalam php di bawah win Oct 31, 2022 am 09:33 AM

Cara melumpuhkan eval dalam PHP di bawah win: 1. Muat turun "PHP_diseval_extension" 2. Cari PHP yang sedang digunakan oleh pelayan 3. Buka fail konfigurasi PHP 4. Tambah kod "extension=diseval.so"; Mulakan semula perkhidmatan.

Penjelasan ringkas tentang penggunaan eval dalam python Penjelasan ringkas tentang penggunaan eval dalam python Mar 25, 2024 pm 02:08 PM

Dalam Python, fungsi eval() digunakan untuk melaksanakan ungkapan rentetan dan mengembalikan hasilnya. Ia memerlukan rentetan yang mengandungi ungkapan sebagai parameter dan menilai ungkapan tersebut. Fungsi eval() berkuasa, tetapi perlu diingatkan bahawa ia akan melaksanakan sebarang ungkapan Python yang sah yang terkandung dalam rentetan, jadi anda harus mengelak daripada menerima rentetan input luaran apabila menggunakannya untuk mengelakkan kelemahan keselamatan.

apakah eval dalam python apakah eval dalam python Aug 08, 2023 pm 05:07 PM

eval ialah fungsi terbina dalam python yang digunakan untuk menghuraikan dan melaksanakan rentetan sebagai kod dan mengembalikan hasil pelaksanaan. Memandangkan fungsi "eval" boleh melaksanakan kod Python sewenang-wenangnya, anda perlu mempertimbangkan isu keselamatan dengan teliti apabila menggunakan fungsi "eval" Jika anda menghantar rentetan yang tidak dipercayai kepada fungsi "eval", ia mungkin membawa kepada isu keselamatan seperti suntikan kod .

Cara menggunakan fungsi eval Python Cara menggunakan fungsi eval Python Jun 04, 2023 am 09:19 AM

Python's eval() Kita boleh menggunakan Pythoneval()[1] terbina dalam untuk menilai secara dinamik ungkapan daripada input berasaskan rentetan atau kod yang disusun. Jika kita menghantar rentetan kepada eval(), maka fungsi itu menghuraikannya, menyusunnya kepada bytecode[2], dan menilainya sebagai ungkapan Python. Tetapi jika kita memanggil eval() dengan objek kod yang disusun, maka fungsi itu hanya melakukan langkah pengiraan, yang sangat mudah jika kita memanggil eval() beberapa kali dengan input yang sama. Eval() Python ditakrifkan seperti berikut. eval(ungkapan[,globals[,lokal]]) fungsi ini

Bagaimana untuk menggunakan kata kunci baharu dalam java Bagaimana untuk menggunakan kata kunci baharu dalam java May 03, 2023 pm 10:16 PM

1. Konsep Dalam bahasa Java, ungkapan "baru" bertanggungjawab untuk mencipta contoh, di mana pembina dipanggil untuk memulakan contoh; jenis nilai pulangan pembina itu sendiri adalah tidak sah, bukan "pembina mengembalikan yang baru dibuat Rujukan objek", tetapi nilai ungkapan baharu ialah rujukan kepada objek yang baru dibuat. 2. Tujuan: Mencipta objek kelas baharu 3. Mekanisme kerja: Peruntukkan ruang memori untuk ahli objek, dan nyatakan nilai lalai secara eksplisit, lakukan pengiraan kaedah pembinaan, dan kembalikan nilai rujukan dengan kerap bermakna membuka yang baru dalam ingatan Ruang memori diperuntukkan dalam kawasan timbunan dalam ingatan Ia dikawal oleh jvm dan menguruskan memori secara automatik. Di sini kita menggunakan kelas String sebagai contoh. Pu

Apakah perbezaan antara buat dan baharu dalam bahasa go Apakah perbezaan antara buat dan baharu dalam bahasa go Jan 09, 2023 am 11:44 AM

Perbezaan: 1. Make hanya boleh digunakan untuk memperuntukkan dan memulakan data jenis slice, map dan chan manakala baru boleh memperuntukkan sebarang jenis data. 2. Peruntukan baru mengembalikan penunjuk, iaitu jenis "*Jenis" manakala membuat pulangan rujukan, iaitu Jenis. 3. Ruang yang diperuntukkan oleh baru akan dikosongkan selepas membuat memperuntukkan ruang, ia akan dimulakan.

See all articles