这是我运行的代码,并将内部函数的代码作为输出。我不明白为什么父函数的局部变量不能作为子函数的参数传递。
function closure (value,num) {
var num1 = num * value;
return function (num1) {
var r = value/num1;
return r;
};
}
console.log( closure(9,3) );
答案 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)
你犯了两个错误。
您创建了一个num1
参数,当它已存在于上述范围内时。为了澄清,您不需要return function(num1)
,因为您已在其上方声明num1
。
您从未调用过返回的闭包函数。 closure(9,3)
会返回一个函数,但您需要通过执行closure(9,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)() );