javascript—为什么在运行时调用声明函数

javascript—为什么在运行时调用声明函数,javascript,function,Javascript,Function,仅仅向对象声明函数就可以调用它 var a={}; a、 xyz=新函数(){ 警惕(“剂量测定”); }删除新的,一切都会好起来: var a = {}; a.xyz = function() { alert("dosomething"); } JSFiddle: 编辑:有关IIFE的更多信息-当您在函数定义前面放置new时,函数将立即作为构造函数调用 正如iceless所提到的,在函数定义之前不应该有new。然而,评论中提到的iceless是不正确的 新函数(){}或新函数()

仅仅向对象声明函数就可以调用它
var a={};
a、 xyz=新函数(){
警惕(“剂量测定”);

}
删除新的,一切都会好起来:

var a  = {};
a.xyz = function() { 
    alert("dosomething");
}
JSFiddle:


编辑:有关IIFE的更多信息-

当您在函数定义前面放置
new
时,函数将立即作为构造函数调用

正如iceless所提到的,在函数定义之前不应该有
new
。然而,评论中提到的iceless是不正确的

新函数(){}或新函数(){}();将像function(){}()一样调用函数;或(函数(){}())

new function(){}
将创建匿名类型的新实例,因此在您的代码中
a.xyz
是一个对象

如果将其更改为just
function(){}()
,它将立即执行该函数,而不返回任何内容。简而言之,请参见

: new操作符使用new创建对象的实例,这就是为什么在声明之后立即执行

很快 将对匿名函数的引用放入xyz并指向函数

xyz= new function(){};
放置对匿名构造函数的新构造实例的引用,使其指向对象。尝试
typeof new function(){}
,您将得到一个对象

当执行代码
new函数(){alert('foo');}
时,会发生以下情况:

  • 将创建一个新对象
  • 使用指定的参数调用构造函数,并将其绑定到新创建的对象。如果未指定参数列表,则调用函数()时不带参数
  • 构造函数返回的对象成为整个新表达式的结果。如果构造函数没有显式返回对象,则使用在步骤1中创建的对象

  • 删除代码+1中提出此问题的新代码。不是因为我不知道答案,而是因为我不知道javascript允许匿名构造函数。这可能最终成为一种新的设计模式,我最终使用了很多。有点像生活。IIAC(立即调用的匿名构造函数)?新函数(){}与函数()不一样,如果你能解释原因,{}就好了;)@这是不正确的,看我的评论,我想我理解它的权利。我删除了我的评论:)
    xyz= new function(){};