有人可以向我解释为什么x是未定义的吗?不应该是123?如何将参数传递给javascript匿名函数
doSomething = (function(x) {
alert(x)
})();
doSomething(123);
有人可以向我解释为什么x是未定义的吗?不应该是123?如何将参数传递给javascript匿名函数
doSomething = (function(x) {
alert(x)
})();
doSomething(123);
doSomething
不是函数。这是undefined
。
doSomething = (function(x) {
alert(x)
})();
这声明一个匿名函数,立即执行它(这是()
做什么),然后设置doSomething
的返回值 - undefined
。您的匿名函数需要一个参数(x
),但没有任何内容传递给它,因此x
是undefined
。
你可能想这样的:
doSomething = function(x) {
alert(x)
};
doSomething(123);
您需要删除括号,现在你定义的功能,并立即用一个空的参数列表调用它。将其更改为:
doSomething = function(x) {
alert(x)
}
然后您可以调用它。
这不是更好的方法吗?让它初始化,然后调用它传递一个参数?
doSomething = (function(x) {
return(
init = function(x){
alert(x)
}
)
})();
doSomething("test")
现在你只是让它更复杂。你为什么要创建一个* global *变量'init'?为什么主要的匿名者使用参数'x'?如果你真的想这样做,请执行以下操作:'doSomething =(function(){return function(x){alert(x);};})();' – 2014-10-27 20:31:06
*你实际存在什么问题*试图在这里解决?为什么你需要使用自动调用的匿名函数?为什么不只是'doSomething = function(x){alert(x); };'? – 2014-10-27 20:32:27
我的一个年轻的同事开发者已经用这种方式包装了他的所有功能,我正在试图绕过我的头来解释为什么。我从来不用这种方式编码,但他坚持认为这是良好的做法?任何解释? – 2014-10-27 20:45:35
这被称为IIFE。 – Omar 2014-10-27 21:45:20