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”参数,在哪里
(也可能不提供主体)
采取了以下步骤:
但是,您应该不惜一切代价避免使用
函数
构造函数。它需要
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'更安全,因为它使用了一个全新的变量/词汇环境(您只能访问全局范围内或函数本身内声明的标识符,而不能访问调用者的范围)。