将局部变量作为父函数内函数的参数传递

时间:2016-06-01 15:16:18

标签: javascript closures

这是我运行的代码,并将内部函数的代码作为输出。我不明白为什么父函数的局部变量不能作为子函数的参数传递。

function closure (value,num) {
    var num1 = num * value;
    return function (num1) {
        var r = value/num1;
        return r;
    };
}
console.log( closure(9,3) );

5 个答案:

答案 0 :(得分:2)

closure返回一个函数,它接受一个参数num1。在函数定义的范围内,num1是参数,而不是外部作用域的变量。如果您只删除参数,则代码应该有效:

function closure(value,num) {
    return function() {
        return(value/(num*value));
    }
}

然后致电:

new_function=closure(9,3); //No output: the inner function has not been executed yet
console.log(new_function()); //Output: the function is executed

或:

console.log(closure(9,3)());

答案 1 :(得分:1)

如果你想使用外部范围内的局部变量,你可以使用它 - 你不需要"传递它"。

实际上你在这里声明了一个内部函数的参数,它本身就是一个内部函数的局部变量 - 假设它具有相同的名称 - 阴影外部变量。你似乎想要

function closure(value) {
    return function(num1) {
        return value/num1;
    };
}
console.log(closure(9)(3));

function closure(value,num) {
    var num1 = num*value;
    return function() {
        return value/num1;
    };
}
console.log(closure(9,3)());

答案 2 :(得分:1)

你犯了两个错误。

  1. 您创建了一个num1参数,当它已存在于上述范围内时。为了澄清,您不需要return function(num1),因为您已在其上方声明num1

  2. 您从未调用过返回的闭包函数。 closure(9,3)会返回一个函数,但您需要通过执行closure(9,3)()

  3. 来实际调用它

    以下是您尝试执行的操作的正确代码:

    function closure(value, num) {
      var num1 = num * value;
      return function() {
        var r = value / num1;
        return r;
      };
    }
    
    console.log(closure(9,3)());
    

答案 3 :(得分:0)

您的问题并不清楚您尝试实现的目标,但您必须使用局部变量作为参数调用内部函数,以便观察您可能期望的结果。< / p>

function closure(value,num) {
    var num1 = num*value;
    return (function(number) {
    var r = value/number;
    return r;
})(num1);
}
console.log(closure(9,3));

答案 4 :(得分:0)

您将num1作为参数传递给闭包,这不是它的工作原理。 num1在闭包的范围内,因此它将访问它而不以任何方式通过参数传递它。关闭闭包的方式。

然后在closure()调用中添加一组括号,如下所示:closure(9,3)()将执行有问题的闭包/返回函数。我还简化了您的代码/功能,因为它包含冗余。

function closure (value, num) {
    return function () {
        return value / (num * value)
    }
}
console.log( closure(9,3)() );