首页 web前端 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);'))();
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

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

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

win下php怎么禁止eval win下php怎么禁止eval Oct 31, 2022 am 09:33 AM

win下php禁止eval的方法:1、下载“PHP_diseval_extension”;2、找到服务器当前使用的PHP;3、打开PHP配置文件 ;4、添加“extension=diseval.so”代码;5、重启服务即可。

python中eval用法通俗讲解 python中eval用法通俗讲解 Mar 25, 2024 pm 02:08 PM

在Python中,eval() 函数用于执行一个字符串表达式并返回其结果。它可以将一个包含表达式的字符串作为参数,并计算这个表达式的值。eval() 函数的功能强大,但需要注意的是,它会执行字符串中包含的任何有效的 Python 表达式,因此在使用时应避免接受外部输入的字符串,以防止安全漏洞。

eval在python中是什么 eval在python中是什么 Aug 08, 2023 pm 05:07 PM

eval在python中是一个内置函数,用于将字符串作为代码进行解析和执行,并返回执行结果。由于“eval”函数可以执行任意的Python代码,因此在使用"eval"函数时需要谨慎考虑安全性问题,如果给“eval”函数传入不可信的字符串,可能会导致代码注入等安全问题。

怎么使用Python eval函数 怎么使用Python eval函数 Jun 04, 2023 am 09:19 AM

Python的eval()我们可以使用内置的Pythoneval()[1]从基于字符串或基于编译代码的输入中动态地计算表达式。如果我们向eval()传递一个字符串,那么该函数会解析它,将其编译为字节码[2],并将其作为一个Python表达式进行计算。但是如果我们用一个编译过的代码对象调用eval(),那么该函数只执行计算步骤,如果我们用相同的输入多次调用eval(),这就非常方便了。Python的eval()的定义如下。eval(expression[,globals[,locals]])该函数

java中的new关键字怎么使用 java中的new关键字怎么使用 May 03, 2023 pm 10:16 PM

1.概念在Java语言里,“new”表达式是负责创建实例的,其中会调用构造器去对实例做初始化;构造器自身的返回值类型是void,并不是“构造器返回了新创建的对象的引用”,而是new表达式的值是新创建的对象的引用。2.用途新建类的对象3.工作机制为对象成员分配内存空间,并指定默认值对成员变量进行显式初始化执行构造方法计算并返回引用值4.实例new操作往往意味着内存中的开辟新的内存空间,这个内存空间分配在内存中的堆区,受到jvm控制,自动进行内存管理。这里我们就是用String这个类来举例说明。pu

go语言中make和new的区别是什么 go语言中make和new的区别是什么 Jan 09, 2023 am 11:44 AM

区别:1、make只能用来分配及初始化类型为slice、map、chan的数据;而new可以分配任意类型的数据。2、new分配返回的是指针,即类型“*Type”;而make返回引用,即Type。3、new分配的空间会被清零;make分配空间后,会进行初始化。

See all articles