匿名函数在Javascript中不起作用? (或者我可能只是没有获得匿名功能)

时间:2015-01-02 02:56:23

标签: javascript function anonymous

我是JavaScript(和编码)的新手,我正在学习 Head First JavaScript 这本书。从阅读开始,我认为匿名函数可能是一个参数,因为函数是值,但我想我可能有这个错误。

根据我的想法,以下代码应输出7。取而代之的是输出,function () { return (m * n); }1根据我的推测,我用字符串完成了类似的事情并且它们也没有按预期处理。

请告诉我,在我对匿名函数的理解,javascript中匿名函数的使用限制以及我们为什么要使用匿名函数时,我的错误在哪里。非常感谢。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<p id="demo"></p>

<script>

    function addIt(x, y) {
        return (x + y);
    }

    var m = 2;
    var n = 3;

    var total = addIt(function() { return (m * n); }, 1);

    document.getElementById("demo").innerHTML = total;

</script>

</body>
</html>

2 个答案:

答案 0 :(得分:6)

您未在addIt()中调用此功能。要调用函数,您必须在其后面添加()。所以它应该是:

function addIt(x, y) {
    return (x() + y);
}

如果您想同时允许数字和函数作为参数,可以使用if进行测试。

&#13;
&#13;
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<p id="demo"></p>

<script>

    function addIt(x, y) {
        if (typeof x == 'function') {
            x = x();
        }
        if (typeof y == 'function') {
            y = y();
        }
        return (x + y);
    }

    var m = 2;
    var n = 3;

    var total = addIt(function() { return (m * n); }, 1);

    document.getElementById("demo").innerHTML = total;

</script>

</body>
</html>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

正如Barmar所说,问题在于你没有调用匿名函数,因此你在函数值而不是数值上做了补充(这是函数的返回值。

  

我对匿名函数的理解出错了

你真的没有。只要知道,当一个匿名函数被赋值给一个变量时,它的使用方法与普通函数几乎相同(虽然存在细微差别)。

  

javascript中使用匿名函数的限制

适用于任何其他类型价值的相同限制。您可以将它作为参数传递给函数,将其保存在变量中等等。当然,作为一个函数,您通常最终必须调用它来获取其返回值。

  

我们为什么要使用匿名函数

主要是

Closures。此外,像setTimeout这样的重要函数期望函数作为参数,并且能够使一个函数使用一次然后再不使用它是有帮助的。