Javascript 函数与新函数的区别

Javascript 函数与新函数的区别,javascript,function,constructor,new-operator,Javascript,Function,Constructor,New Operator,我有时看到人们做这个功能('alert(“hi”)),有时他们做新功能('alert(“hi”)) 这两者之间有区别吗?第127页说它们是一样的 15.3.1.1功能(p1、p2、…、pn、阀体) 调用函数时函数 有一些参数p1,p2,…,pn, body(其中n可能是0,即, 没有“p”参数,在哪里 (也可能不提供主体) 采取了以下步骤: 创建并返回一个新函数对象,就像标准内置函数一样 构造函数用于一个新的 具有相同参数的表达式 (15.3.2.1) 但是,您应该不惜一切代价避免使用函数构造

我有时看到人们做这个
功能('alert(“hi”))
,有时他们做
新功能('alert(“hi”))

这两者之间有区别吗?

第127页说它们是一样的

15.3.1.1功能(p1、p2、…、pn、阀体) 调用
函数时
函数 有一些参数p1,p2,…,pn, body(其中n可能是0,即, 没有“p”参数,在哪里 (也可能不提供主体) 采取了以下步骤:

  • 创建并返回一个新函数对象,就像标准内置函数一样 构造函数用于一个新的 具有相同参数的表达式 (15.3.2.1)

  • 但是,您应该不惜一切代价避免使用
    函数
    构造函数。

    它需要
    eval
    传递给它的字符串
    eval
    是邪恶的,而且速度也很慢。

    新功能的用法只有一种。这是:

    var constructor = new Function;
    
    // then this 
    
    constructor.prototype = { 
        //...  stuff
    };
    
    // OR
    
    constructor.prototype = new someOtherThing;
    
    // then
    
    var obj = new constructor;
    
    如果您想创建一个只使用继承的空构造函数的对象构造函数,基本上可以使用
    newfunction


    如果您想让函数执行任何操作,则根本不要使用
    function

    要回答您的问题:
    函数(…)
    新函数(…)
    根据上下文完全相同


    为了阐明何时何地应该使用该方法,答案很少。我知道有一种情况,我们使用了
    函数(…)
    ,那是在创建自定义ASP.NET服务器控件时。我们通常有一些类似于
    [ServerControl].OnClientClick
    ,它指定了一个JavaScript字符串(在服务器端),当单击事件发生时,该字符串应该在客户端运行。然后,我们将JS字符串放入函数中,并在满足特定条件时调用它。这还允许我们调用
    .call(…)
    函数来设置上下文并传入事件参数,就像从
    onclick
    属性调用JS一样。

    将函数构造函数作为函数调用(不使用
    new
    操作符)与将其作为构造函数调用具有相同的效果

    这意味着,如果您这样做,那么代码也是一样的:

    var result1 = new Function('a', 'b', 'return a + b')
    var result2 = Function('a', 'b', 'return a + b')
    

    结果1和结果2是相同的。

    除非在极少数情况下,你不应该这样做。看看它们的相似之处,它们是
    执行错误
    (隐含
    eval
    其中
    函数(){alert(“hi”);}
    也同样有效?WTF,各位).@Raynos那么什么时候使用呢?@user:在极为罕见的情况下。如果你一定要问,就别问了!请使用带规范链接的扇区/页码。@SLaks没有在url前加上#15.3是他们的错。@Raynos:这是PDF格式的。如果他们尝试了,他们是做不到的。@SLaks:不客气@CMS前几天在评论中引用了它。@Raynos:不幸的是,这就是我的能力范围。指的是别人的辛勤劳动;o) 这比
    function(){}
    好多少?@SLaks这是风格的问题。但是它仍然是
    新函数的唯一有效用法
    信不信由你,jQuery使用的
    新函数(…)
    @SLaks只是使用eval而没有使用eval。new Function vs eval有什么论据吗?@Raynos,我想说'Function'构造函数比'eval'更安全,因为它使用了一个全新的变量/词汇环境(您只能访问全局范围内或函数本身内声明的标识符,而不能访问调用者的范围)。