closure函数传递多个参数

时间:2013-11-20 00:00:49

标签: javascript

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

在案例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>

案例-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>

1 个答案:

答案 0 :(得分:0)

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

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

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”只是 - 闭包/函数的参数 - 并且只会在调用闭包时绑定到值,如multiply_by5_over_sum(4, 3)所做。