以两种不同的方式调用函数-JavaScript

以两种不同的方式调用函数-JavaScript,javascript,function,anonymous-function,Javascript,Function,Anonymous Function,我对JavaScript非常陌生,所以如果这个答案非常明显或者我找错了方向,我深表歉意 以下代码段的区别是什么: function primeAddNum(innerHTML) { return function() { addNum(innerHTML); return false; }; } var func = primeAddNum(innerHTML); 第二条: var func = function() { retu

我对JavaScript非常陌生,所以如果这个答案非常明显或者我找错了方向,我深表歉意

以下代码段的区别是什么:

function primeAddNum(innerHTML) {
    return function() {
        addNum(innerHTML);
        return false;
    };
}
var func = primeAddNum(innerHTML);
第二条:

var func = function() {
        return function() {
            addNum(innerHTML);
            return false;
        };
}();

上面的一个按我所希望的方式工作,但底部不行,但这对我来说并不太重要。我想知道的是每个模块背后的逻辑,因为我看不出它们之间的区别

没有区别,您可以毫无问题地使用这两个函数

第二个函数只能创建一次
func
。但使用第一个,您可以创建许多:

var func1 = primeAddNum(innerHTML);
var func2 = primeAddNum(someOtherInnerHTML);

第二个块的问题是
innerHTML
在那里没有定义,因为您没有传递它。如果将其更改为:

var func = function(innerHTML) {
    return function() {
        addNum(innerHTML);
        return false;
    };
}(innerHTML);

我知道这不是问题所在,但是让匿名函数返回另一个匿名函数是相当不连贯的。谢谢,现在它更有意义了。我不敢相信我已经把头发扯过这个问题了。我已经看到了答案。也考虑了Esailija所说的:第二个样式,具有自动调用功能,只供一个使用。如果不重复整个过程,就无法创建新函数。因此,如果您计划重用
primeAddNum
,请使用第一个版本。这不会使其未定义
undefined
,如果它确实是
未定义的
,您只是捕获
innerHTML
,而不是依赖外部引用。这当然很好,但取决于代码,这是不必要的。@Esailija我假设
innerHTML
只是一个示例,而不是全局变量(或范围内的任何内容)。第一个代码段(根据OP工作)将其作为参数传递给外部函数。我只是调整了第二个版本来做同样的事情,因为我看不出任何理由说明它在其他情况下不起作用(同样,OP声明第二个版本不起作用)。它不是一个全局变量,而是一个根据用户事件循环和更改的变量。不管怎样,都要感谢他们。