<!DOCTYPE html>
<html>
<body>
<p>Changing a local variable.</p>
<p id="demo"></p>
<script>
var add = (function () { /* do I need to put x in this statement?
like "var add = (function(x) { " */
var counter = 0;
return function (x) {return counter+=x}
})()
add(10);
add(15);
alert(typeof(add));
document.getElementById("demo").innerHTML = add(20);
</script>
</body>
</html>
据我所知,在上面的示例中,add被赋给自调用函数的返回值。
自调用函数只运行一次。它将计数器设置为零(0),并返回一个函数表达式。
我的问题是为什么函数没有被定义为:
var add = (function(x) {
....
}()
答案 0 :(得分:4)
因为您没有传递任何参数:
// Receive the arguments...
// v
var add = (function(x) {
....
}()
//^
//That you pass in here.
这个自调用函数返回另一个函数。它的功能(返回的功能)接受参数x
。
答案 1 :(得分:2)
考虑匿名函数,例如创建函数的函数(在本例中)。那么,您是否需要知道x
来创建一个使用参数x
的函数?基本上,不,因为你只需要知道你在匿名函数中创建的函数实际被调用。
答案 2 :(得分:-1)
您正在尝试创建一个自动执行的匿名函数,该函数返回一个函数的定义,该函数设置为&#34; add&#34;。更好(也不那么混乱)的方法是将函数定义为:
var add = function(x) {
//Do things
}