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

 更新时间:2007年03月08日 00:00:00   作者:  
函数是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类定义原型方法的两种实现的区别"的回复。

相关文章

  • JS访问对象两种方式区别解析

    JS访问对象两种方式区别解析

    这篇文章主要介绍了JS访问对象两种方式区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 配置eslint规范项目代码风格

    配置eslint规范项目代码风格

    这篇文章主要介绍了配置eslint规范项目代码风格,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 使用JS获取页面上的所有标签

    使用JS获取页面上的所有标签

    这篇文章主要介绍了使用JS获取页面上的所有标签 ,需要的朋友可以参考下
    2018-10-10
  • JavaScript Table排序 2.0 (更新)

    JavaScript Table排序 2.0 (更新)

    JavaScript,Table,排序,order,attribute,property,sort,Compare
    2009-05-05
  • JS 音频可视化插件Wavesurfer.js的使用教程

    JS 音频可视化插件Wavesurfer.js的使用教程

    Wavesurfer.js是一款基于HTML5 canvas和Web Audio的音频播放器插件,本文主要记录它及其视觉效果插件Regions插件的使用方法,感兴趣的朋友跟随小编一起看看吧
    2018-10-10
  • Blazor实现微信的Tab切换功能

    Blazor实现微信的Tab切换功能

    这篇文章主要介绍了Blazor实现微信的Tab切换功能,本文中的UI组件使用的是MASA Blazor,您也可以是其他的UI框架,这个并不影响实际的运行效果,本文案例是兼容PC和Android的,演示效果是android中执行的,在PC中执行效果依然有效,需要的朋友可以参考下
    2023-01-01
  • Three.js+React制作3D梦中海岛效果

    Three.js+React制作3D梦中海岛效果

    深居内陆的人们,大概每个人都有过大海之梦吧。本文使用React+Three.js技术栈,实现3D海洋和岛屿,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-05-05
  • 深入了解Hybrid App技术的相关知识

    深入了解Hybrid App技术的相关知识

    这篇文章主要介绍了深入了解Hybrid App技术的相关知识,Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具" Native App良好用户交互体验的优势 "和" Web App跨平台开发的优势 ",需要的朋友可以参考下
    2019-07-07
  • JavaScript中对循环语句的优化技巧深入探讨

    JavaScript中对循环语句的优化技巧深入探讨

    这篇文章主要介绍了JavaScript中对循环语句的优化技巧深入探讨,本文翻译自一个台湾朋友的文章,需要的朋友可以参考下
    2014-06-06
  • 微信小程序路由跳转两种方式示例解析

    微信小程序路由跳转两种方式示例解析

    这篇文章主要为大家介绍了微信小程序路由跳转两种方式示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论