簡體   English   中英

我需要在Javascript閉包中指定參數嗎

[英]Do I need to specify parameter in Javascript closure

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

因為您沒有傳遞任何參數:

//              Receive the arguments...
//                  v
var add = (function(x) {
....
}()
//^
//That you pass in here.

該自調用函數返回另一個函數。 就是那個函數(返回的函數),它接受參數x

考慮使用匿名函數,例如創建函數的函數(在這種情況下)。 因此,您是否需要知道x才能構成使用參數x 基本上沒有,因為您只需要在實際調用匿名函數內部創建的函數時才知道它。

您試圖創建一個自執行匿名函數,該函數返回設置為“ add”的函數的定義。 更好的方法(而不是造成混亂的方法)是這樣定義函數:

var add = function(x) {
    //Do things
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM