`

function,new function,new Function对比

    博客分类:
  • js
 
阅读更多
 函数是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 
   
  这个方式是不常使用的,效果和方法

----------------------------------------------------
情景一:
var yx01 = new function() {return "圆心"};
alert(yx01);
我们运行情景一代码,将返回显示“[object object] ”,此时该代码等价于:

function 匿名类(){
return "圆心";
}
var yx01 = new 匿名类();
alert(yx01);我们对情景一的代码进行下面改造:

var yx01 = new function() {return new String("圆心")};
alert(yx01);
我们运行,将会发现返回的是“圆心”,这是为什么呢?

只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实为 return 原始类型 undefined),那么就返回 new 创建的匿名对象
由于 new String 会构造一个对象,而不是一个 string 直接量,且new String(x) 如果带参数,那么alert它的时候就会返回 x。所以 yx01 将返回 new String(”圆心”) 这个对象,而 alert yx01 则显示 “圆心”。

情景二:

var yx02 = function() {return "圆心"}();
alert(yx02);我们运行情景二代码,将返回显示“圆心”,此时该代码等价于:

var 匿名函数 = function() {return "圆心"};
yx02 = 匿名函数();
alert(yx02);很明显,yx02 返回的是匿名函数的执行结果值,即 yx02 为:“圆心”。

当然匿名函数的执行结果也可以为一个匿名对象。具体常见应用可以看《Javascript的一种模块
分享到:
评论

相关推荐

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

    ### JavaScript中的function, new function, new Function之间的区别 在JavaScript编程语言中,函数是一等公民,这意味着函数不仅可以作为值被赋给变量、作为参数传递给其他函数,甚至还可以被当作返回值从函数中...

    理解Javascript Function与Object

    理解Javascript Function与Object 在JavaScript中,Function和Object是两个非常重要的概念,它们之间存在着紧密的关系。在这篇文章中,我们将深入探讨Function和Object的关系,了解它们之间的联系和区别。 ...

    ES6中new Function()语法及应用实例分析

    在JavaScript的ES6标准中,`new Function()` 是一种创建函数的方法,虽然它不常用,但在某些特定场景下,如动态生成代码或处理服务器返回的函数逻辑时,它显得非常实用。下面我们将深入探讨`new Function()` 的语法...

    你可能不知道的JavaScript的new Function()方法

    `new Function()` 是JavaScript中的一个不太常见的构造函数,它允许我们动态地创建函数。这个方法在某些特定场景下非常有用,尽管在日常编程中不常用,因为它与传统的函数声明和匿名函数表达式相比,可能存在一些...

    邪恶的eval和new Function使用介绍

    eval 和 new Function 的邪恶使用介绍 Eval 和 new Function 是 JavaScript 中两个强大的函数,但是它们也可以被恶意使用,导致潜在的安全风险。在这篇文章中,我们将探讨 Eval 和 new Function 的邪恶使用介绍,...

    new.tar.gz_NEW_smoothing function

    smoothing a function

    db2 function 和 procedure

    根据参数数量和返回类型,DB2函数可以分为标量函数(Scalar Function)、聚合函数(Aggregate Function)和窗口函数(Window Function)。 2. **创建函数**:使用`CREATE FUNCTION`语句来定义一个新的函数。例如,...

    详解new function(){}和function(){}() 区别分析

    情景一:var yx01 = new function() {return “圆心”}; alert(yx01); 我们运行情景一代码,将返回显示“[object object] ”,此时该代码等价于: function 匿名类(){ return “圆心”; } var yx...

    flash与C#通信 CallFunction 出现COM组件错误的处理

    XmlTextWriter xw = new XmlTextWriter(new StringWriter(sb)); xw.WriteStartElement("invoke"); xw.WriteAttributeString("name", Fname); xw.WriteAttributeString("returntype", "xml"); xw....

    js中function函数的使用方法.docx

    var func = new Function('arg1', 'arg2', 'alert(arg1 + " : " + arg2)'); func('ooo', 'ppp'); // 弹出框显示 'ooo : ppp' ``` 这种方式可以动态创建并执行函数,但在生产环境中需谨慎使用,因为它可能存在安全...

    关于eval 与new Function 到底该选哪个?

    在JavaScript编程中,`eval` 和 `new Function` 都被用来执行字符串化的JavaScript代码,但它们之间存在着一些重要的区别和使用场景上的考量。本文将深入探讨这两个函数的特性和性能差异,帮助开发者做出明智的选择...

    javascript使用eval或者new Function进行语法检查

    在没有专门的语法解析库的情况下,可以利用JavaScript自身提供的功能来进行简单的语法验证,如使用`eval()`或`new Function()`。 `eval()`方法是JavaScript中的一个函数,它能够将字符串作为JavaScript代码执行。在...

    math function

    Namespace xFunction Public Class f Const NumList = "零壹贰叁肆伍陆柒捌玖" Const UnitList = "仟佰拾亿仟佰拾万仟佰拾元角分" Public Shared Sub StringList() Dim tmepList As New List(Of String) ...

    聊聊new Function这个陌生面孔及函数作用域和函数执行顺序

    【标题】: "深入理解JavaScript中的new Function与函数作用域和执行顺序" 【描述】: 本文将探讨JavaScript中不常见的new Function构造函数的用法,以及函数的作用域和执行顺序这两个关键概念。通常,我们定义函数的...

    Bird-LS-2009-Measuring-function-duration-with-ftrace.pdf

    FTrace is a relatively new kernel tool for tracing function execution in the Linux kernel. Recently, FTrace added the ability to trace function exit in addition to function entry. This allows for ...

    newMap地图

    (function(a){a.N={VERSION:...return function(c){return c[b]=c[b]||"_newmap_id_"+ ++a,c[b]}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1e3/60)}var b=window.requestAnimationFrame||

    JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结

    本文将深入探讨JS对象与JSON的互换、New Function构造函数、forEach方法以及DOM事件流等核心知识点,同时还会涉及JavaScript的数据类型、运算符、Memoization技术及闭包。 1. **数据类型**: JavaScript提供了七种...

    javascript Function

    var ajax_exec = new Function(ajax_js_code); var result = ajax_exec(); alert(result.a + ":" + result.b); result.func(); ``` 通过这种方式,我们可以将服务器返回的JSON字符串转换成可执行的JavaScript代码。...

Global site tag (gtag.js) - Google Analytics