var func = (function(){
//do something
})();
然后我调用func()
它说func不是函数?
如果是这种情况我必须这样做
function func(){
//do something
};
func();
以后
func();
正确?
答案 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,稍后使用此名称来调用它。当您创建匿名函数时,您不存储任何引用,因此您无法调用它。