function, new function, new Function之间的区别
函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系。
var foo01 = function() //or fun01 = function()
{
var temp = 100;
this.temp = 200;
return temp + this.temp;
}
alert(typeof(foo01));
alert(foo01());
运行结果:
function
300 最普通的function使用方式,定一个JavaScript函数。两种写法表现出来的运行效果完全相同,唯一的却别是后一种写法有较高的初始化优先级。在大扩号内的变量作用域中,this指代foo01的所有者,即window对象。
var foo02 = new function()
{
var temp = 100;
this.temp = 200;
return temp + this.temp;
}
alert(typeof(foo02));
alert(foo02.constructor());
运行结果: object
300 这是一个比较puzzle的function的使用方式,好像是定一个函数。但是实际上这是定一个JavaScript中的用户自定义对象,不过这里是个匿名类。这个用法和函数本身的使用基本没有任何关系,在大扩号中会构建一个变量作用域,this指代这个作用域本身。
var foo3 = new Function('var temp = 100; this.temp = 200; return temp + this.temp;');
alert(typeof(foo3));
alert(foo3());
运行结果: function
300 使用系统内置函数对象来构建一个函数,这和方法一中的第一种方式在效果和初始化优先级上都完全相同,就是函数体以字符串形式给出。
var foo4 = Function('var temp = 100; this.temp = 200; return temp + this.temp;');
alert(typeof(foo4));
alert(foo4());
运行结果:
function
300 这个方式是不常使用的,效果和方法三一样,不过不清楚不用new来生成有没有什么副作用,这也体现了JavaScript一个最大的特性:灵活!能省就省。
关于函数初始化优先级这个问题,可以参看:"JS类定义原型方法的两种实现的区别"的回复。
相关推荐
-
详解new function(){}和function(){}() 区别分析
情景一:var yx01 = new function() {return "圆心"}; alert(yx01); 我们运行情景一代码,将返回显示"[object object] ",此时该代码等价于: function 匿名类(){ return "圆心"; } var yx01 = new 匿名类(); alert(yx01);我们对情景一的代码进行下面改造: var yx01 = new function() {return new
-
javascript使用eval或者new Function进行语法检查
使用new Function( ) 来进行语法检查 eval( ) 方法是不能乱用的,在不适当的时候使用eval( ) 方法可能导致整个程序都会出问题的: 而new Function( ) 就没这么大问题.虽然new Function( ) 在任何情况下,构造的函数都是在全局作用域下直接工作的,但只作语法检查的话,并不会因为作用域问题而产生意外结果,只要你不直接调用通过它构造的新函数. 在eval( ) 接受的参数前面增加"0," 其实这是由于IE中存在一个bug.出于某种原因,如果你
-
Eval and new funciton not the same thing
1.函数声明式 复制代码 代码如下: function foo(){ //code } 在JS中,函数也是对象,函数对象连接到Function.prototype( Function.prototype连接到Object.prototype) 2.函数字面量式 复制代码 代码如下: var foo = function foo(){ //code } 对象拥有一个连到原型对象的隐藏连接.对象字面量间生的对象连接到Object.prototype. foo.__proto__ == Functio
-
邪恶的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(1
-
function, new function, new Function之间的区别
函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系. 使用方法一: 复制代码 代码如下: var foo01 = function() //or fun01 = function() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typeof(foo01));
-
Function.prototype.apply()与Function.prototype.call()小结
老是忘掉这两个东东的用下,写下来做个记录吧. 他们作用是一模一样的,只是传入的参数不一样 apply apply接受两个参数,第一个制定了函数体内this对象的指向,第二个参数为一个带下标的集合(可遍历对象),apply方法把这个集合中的元素作为参数传递给被调用的函数: var func = function(a, c, c){ alert([a,b,c]); //[1,2,3] } func.apply(null, [1,2,3]); call call传入的参数不固定,和apply相同的是,
-
vue中计算属性(computed)、methods和watched之间的区别
前言 本文主要给大家介绍了关于vue中计算属性(computed).methods和watched之间的区别,分享出来供大家参考学习,下面来一起看看详细的介绍: 计算属性 和普通属性一样是在模板中绑定计算属性的,当data中对应数据发生改变时,计算属性的值也会发生改变. Methods methods是方法,只要调用它,函数就会执行. 相同:两者达到的效果是同样的. 不同:计算属性是基于它们的依赖进行缓存的,只有相关依赖会发生改变时才会重新求职.只要相关依赖未改变,只会返回之前的结果,不再执行函
-
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
简介 最近了解到很多网页开发者对jquery中的 .bind() .live() .delegate() 和 .on() 方法存在很多的疑惑.这些疑惑通常是关于它们之间真正的区别是什么啊,什么时候该使用它们啊.下面本文将给大家详细介绍这四个方法之间的区别,分别对每个方法都进行了详细的介绍,话不多说,来一起看看详细的介绍: 在我们深入了解这些方法之前,我们先来一段常见的的HTML,作为我们编写jquery示例方法使用的样本. <ul id="members" data-role=&
-
总结JavaScript三种数据存储方式之间的区别
sessionStorage .localStorage 和 cookie 之间的共同点: 都是保存在浏览器端,且同源的. sessionStorage .localStorage 和 cookie 之间的区别: cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递.而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存.cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下. 存
-
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
本文实例讲述了JS箭头函数和常规函数之间的区别.分享给大家供大家参考,具体如下: 在 JavaScript 中,你可以通过多种方式去定义函数. 第一种常用的方法是使用关键字 function: // 函数声明 function greet(who) { return `Hello, ${who}!`; } // 函数表达式 const greet = function(who) { return `Hello, ${who}`; } 代码中的函数声明和函数表达式被称为"常规函数". 从
-
laravel与thinkphp之间的区别与优缺点
Laravel框架: Laravel是当今最熟练,流行和广泛使用的开源框架之一,一直秉承着优雅的原则,完美支持**composer**,实现了更丰富的扩展,社区文档活跃,相较于TP,Lavavel更庞大,安全性也更高,更适合开发大中型项目,被称为"巨匠型开发框架". 问题描述: 1.渲染模版方式的不同 在Laravel框架里,使用return view()来渲染模版:而ThinkPHP里则使用了$this->display()的方式渲染模版. 2.在实际开发中我们常常遇到这样的问
-
js中forEach的用法之forEach与for之间的区别
目录 一.定义和用法 二.运用场景 1.运用的场景(计算数字之和) 2.运用的场景(给原始数组新增key值) 三.forEach 跳出循环 1.forEach 跳出当前的循环 return 2.forEach结合try跳出整个循环 3.forEach 与for循环的区别 [面试题] 一.定义和用法 forEach() 调用数组的每个元素,并将元素传递给回调函数. 注意: forEach() 对于空数组是不会执行回调函数的. 用法: array.forEach(function(currentVa
-
PHP abstract与interface之间的区别
1.php 接口类:interface 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 : 复制代码 代码如下: interface Shop { public function buy($gid); public function sell($gid); publi
-
Servlet和Filter之间的区别与联系
filter是一个可以复用的代码片段,可以用来转换HTTP请求.响应和头信息.Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应. 最近使用插装的时候,改用cookie对计算机进行识别,加入了过滤,仔细研究了一下servlet和filter,区别主要是: 过滤器的生命周期一般都要经过下面三个阶段: servlet的特点是: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Con
随机推荐
- awk统计文件中某关键词出现次数的命令
- javascript 获取多条数据(模拟ajax获取数据)
- PHP中通过trigger_error触发PHP错误示例
- PHP使用DirectoryIterator显示下拉文件列表的方法
- 修改Mysql root密码的方法
- php实现微信公众号无限群发
- Go语言结构体定义和使用方法
- 24款非常有用的 jQuery 插件分享
- Web 前端设计模式--Dom重构 提高显示性能
- SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
- Sql server2005 优化查询速度50个方法小结
- JavaScript中的条件判断语句使用详解
- js变量提升深入理解
- Node.js 数据加密传输浅析
- Android下修改SeekBar样式的解决办法
- c#并行编程示例分享
- 利用java制作简单的音乐播放器
- php循环创建目录示例分享(php创建多级目录)
- 利用MVC编写广告条轮播效果
- Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程