我是否需要在Javascript闭包中指定参数

时间:2014-05-29 16:12:54

标签: javascript closures

<!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) {
....
}()

3 个答案:

答案 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
}