function, new function, new Function之间的区别


Posted in Javascript onMarch 08, 2007

函数是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类定义原型方法的两种实现的区别"的回复。

Javascript 相关文章推荐
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
Jun 04 Javascript
javascript放大镜效果的简单实现
Dec 09 Javascript
laytpl 精致巧妙的JavaScript模板引擎
Aug 29 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
Aug 16 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
基于Vue实现timepicker
Apr 25 Javascript
JS原生轮播图的简单实现(推荐)
Jul 22 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
Vue.js 事件修饰符的使用教程
Nov 01 Javascript
小程序实现列表多个批量倒计时
Jan 29 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
Apr 17 Javascript
vue在图片上传的时候压缩图片
Nov 18 Vue.js
JavaScript中this关键字使用方法详解
Mar 08 #Javascript
区分JS中的undefined,null,"",0和false
Mar 08 #Javascript
在JavaScript中使用inline函数的问题
Mar 08 #Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 #Javascript
JavaScript语言中的Literal Syntax特性分析
Mar 08 #Javascript
从JavaScript的函数重名看其初始化方式
Mar 08 #Javascript
翻译整理的jQuery使用查询手册
Mar 07 #Javascript
You might like
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
VUE+node(express)实现前后端分离
2019/10/13 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
深入浅析Python中的yield关键字
2018/01/24 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python excel转换csv代码实例
2019/08/26 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
为什么group by 和order by会使查询变慢
2014/05/16 面试题
商务英语应届生自我鉴定
2013/12/08 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
virtualenv隔离Python环境的问题解析
2022/06/21 Python