不能在javascript中再次匿名调用函数?

时间:2016-06-18 09:15:07

标签: javascript

var func = (function(){
//do something
})();

然后我调用func()它说func不是函数?

如果是这种情况我必须这样做

function func(){
//do something
};
func();

以后

func();

正确?

6 个答案:

答案 0 :(得分:6)

var func = (function(){
//do something
})();

此代码最后有(),即它已经调用了该函数。分配给func的值是函数的返回值。

如果您想将功能本身分配给func,请执行以下操作:

var func = function () {
  //do something
};

答案 1 :(得分:1)

错误是正确的; func调用您的函数的结果(由定义后的()引起)。离开这将解决这个问题。

请注意,您无法重复使用匿名函数,因为您无法识别要重复使用的函数。由于您将其分配给变量,因此您实际上是在命名它。

答案 2 :(得分:1)

您在此处使用的功能已经使用func

执行到变量(function(){})()

使用func作为函数,你必须返回函数

var func = (function(){
  return function (){ 
     //  do something here
  }
})();

所以你可以致电func()

的jsfiddle example

答案 3 :(得分:1)

自我调用匿名函数是一个只能执行一次的函数,因为它没有引用

在这种情况下

var func = (function(){
    //do something
})();

变量func没有对匿名函数的引用,然后它将包含函数返回的值,在这种情况下是undefined。

如果你想能够调用该函数,你必须创建一个这样的引用:

var func = function(){
    //do something
};

function func() { 
    // do something
}

答案 4 :(得分:0)

就这样做,你不需要()< - 这在最后一行

 var func = function(){

    }
console.log(func);

答案 5 :(得分:0)

遵循语法

(function(){
  // Do something
})()

被称为Immediately Invoked Function Expression

当你这样做时

var func = (function(){
//do something
})();

您没有分配功能,而是分配功能。因此,如果您返回一个对象,它将引用该对象而不是该函数。

如果你希望有一个函数作为init并且能够在单词之后调用它,那么有一个命名函数并调用这个函数,

function init(){}
init();

请参阅What is the (function() { } )() construct in JavaScript?以获取更多参考资料。

当您定义类似

的功能时
function  func1(){}
// or
var func1 = function(){}

在内存中创建引用并将其分配给functionName,稍后使用此名称来调用它。当您创建匿名函数时,您不存储任何引用,因此您无法调用它。