我有:
var Init = (function() {
my js goes here
})();
当页面加载时,我的 JavaScript 代码可以正确执行。此外,我还有:
$('form :checkbox').change(function() {
Init();
});
但是firebug说Init不是一个函数。
我有:
var Init = (function() {
my js goes here
})();
当页面加载时,我的 JavaScript 代码可以正确执行。此外,我还有:
$('form :checkbox').change(function() {
Init();
});
但是firebug说Init不是一个函数。
这不是一个函数。
(function() {
...
})()
评估匿名函数然后。在这种情况下,评估的结果显然不会返回一个函数对象 :-)
考虑:
f = (function() {
return "not a function :("
})()
alert(f())
和
f = (function() {
return function () { return "Yay!" }
})()
alert(f())
编程愉快 :)
Init = (function () {
function Init () {
alert("whee!")
}
Init()
return Init
})()
Init()
var Init; (Init = function Init () {
alert ("wee");
})()
Init
作为一个函数执行,你的自执行函数内部的代码必须返回一个函数。唯一需要这样做的原因是如果你需要根据某些数据状态动态构建特定的函数。var Init = (function() {
// some code
return function () {
// some dynamic code dependent upon your previous code
};
}());
Init
不是一个函数,而是调用该函数的结果。
你可以创建一个函数或者调用它,但不能同时进行。
从技术上讲,你可以通过添加 return arguments.callee;
来返回该函数的调用,但这是一个愚蠢的想法。
你可能不应该调用该函数,而是需要理解你想让你的代码做什么。
var Init; (Init = function () { ... })();
请注意,(var Init = ...)()
不是有效的,因为 var
语句不是表达式。 - Cristian Sanchez快速解决方案 尝试像这样替换
var Init = function() {
my js goes here
});
在加载时调用Init函数
你可以像上面那样做,但也可以这样做
function Init(){...}();
你完全可以使用自命名的自执行函数。
如果你想避免使用名为Init的函数,你可以像CD Sanchez建议的那样在执行中进行赋值。
在函数末尾加上();就可以使其自执行。将函数用括号包裹起来可以使其匿名。但是似乎你不想让它匿名。
(function Init(){
/*...*/
})();
但是这将把这个函数的使用减少到它的主体中。
另一种方法是将声明与执行分开:
var Init = function(){
/*...*/
},
initResult = (function(){ return Init(); })();
Init
不会在封闭的作用域中被定义。也许您的意思是:var Init; (Init = function() { ... })();
? - Cristian SanchezInit
中返回一个函数,那么它实际上会与问题中的代码有相同的问题。 - user113716Init
中,然后执行赋值表达式的结果(这将是function() {}
部分)。我过去使用过这个方法,效果非常好。但我也不是万无一失的——如果您发现我的推理有缺陷,请告诉我。 - Cristian Sanchez
var Init; (Init = function () { alert("wee"); })()
。 - Cristian Sanchezfunction Init(){} Init();
?这样更清楚表达意图。 - Zecc