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 相关文章推荐
JavaScript在IE中“意外地调用了方法或属性访问”
Nov 19 Javascript
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
ModelDialog JavaScript模态对话框类代码
Apr 17 Javascript
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
javascript SpiderMonkey中的函数序列化如何进行
Dec 05 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
Bootstrap3学习笔记(二)之排版
May 20 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
Jul 01 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
原生js实现简单的链式操作
Jul 04 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
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来处理多个提交任务
2006/10/09 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP多进程编程实例
2014/10/15 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Python语言描述最大连续子序列和
2017/12/05 Python
Python创建或生成列表的操作方法
2019/06/19 Python
pyqt5中动画的使用详解
2020/04/01 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
满月酒答谢词
2014/01/14 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers