Javascript 传递多个参数的闭包函数

Javascript 传递多个参数的闭包函数,javascript,Javascript,我试图理解Javascript中的闭包。。我已经创建了一个函数并传递了2个值(a,b)…我想知道内部函数square(x)如何在返回square(a)+square(b)之前获取a的值并返回其平方 在案例2中,我做了类似的传球(x,y),但那不起作用 你能解释一下吗 案例1 <html> <head> <script> function addsquares(a,b){ funct

我试图理解Javascript中的闭包。。我已经创建了一个函数并传递了2个值(a,b)…我想知道内部函数square(x)如何在返回square(a)+square(b)之前获取a的值并返回其平方

在案例2中,我做了类似的传球(x,y),但那不起作用

你能解释一下吗

案例1

<html>
    <head>
        <script>
            function addsquares(a,b){
                function square(x){
                    return x * x;
                }
                return square(a) + square(b)
            }
            document.write(addsquares(2,3))
        </script>
    <head>
    <body>
    <body>
</html>

函数addsquares(a,b){
函数平方(x){
返回x*x;
}
返回广场(a)+广场(b)
}
文件.书写(addsquares(2,3))
案例2

<html>
    <head>
        <script>
            function addsquares(a,b){
                function square(x,y){
                    return x * y;
                }
                return square(a) + square(b)
            }
            document.write(addsquares(2,3))
        </script>
    <head>
    <body>
    <body>
</html>

函数addsquares(a,b){
函数平方(x,y){
返回x*y;
}
返回广场(a)+广场(b)
}
文件.书写(addsquares(2,3))

呈现的代码中不涉及闭包。内部函数立即执行,并从外部函数参数传递适当的值。它是调用返回的内部函数(两次,并加在一起)的结果,而不是闭包/函数对象

否则,闭包的参数——这里是秘密:闭包只是在特定绑定上下文中创建的函数对象——与普通函数的函数对象一样。下面是一个实际创建闭包的示例:

function multiply_over_sum(a){
    function sum(x, y) {
        return a * (x + y);
    }
    // NOW we create a closure - as a FUNCTION-OBJECT (sum)
    // is returned to the caller while maintaining access to the
    // current binding context.
    return sum;
}

// Then multiply_by5_over_sum is now a FUNCTION-OBJECT 
// that has "a" bound to the value 5.
// (It is a closure specifically because it binds to a variable.)
var multiply_by5_over_sum = multiply_over_sum(5);

// This FUNCTION-OBJECT (closure) can be INVOKED like any function
// to yield a value. In this case the values 4 and 3 are passed as
// the arguments for "x" and "y", respectively
var sum = multiply_by5_over_sum(4, 3);

虽然严格来说这不是真的(因为闭包绑定到JavaScript中的变量,而不是值),但上面给定示例中的闭包可以被视为以下函数:

var multiply_by5_over_sum = function (x, y) {
  return 5 * (x + y);
};

也就是说,只捕获了闭包(“a”)中绑定的变量。参数“x”和“y”只是闭包/函数的参数,并且只有在调用闭包时才会绑定到值,就像
用5乘以求和(4,3)

所做的那样,您没有将
y
的值传递到
平方
?我可以问一下你为什么要改变。。。第一个看起来很好fine@Arun:在第一种情况下,“a”的值是如何传递给x的?@user1050619当调用
square
函数时(在一种情况下,
a
用作参数,在另一种情况下,
b
用作参数)。@Arun:我不明白,,,当你在函数内部可以接受“x”作为“a”值时,为什么同样的情况不适用于“x”和“y”