这个问题可能在其他地方有答案,但我什至不确定如何开始寻找答案。我是 JavaScript 的新手,所以这对我来说很难理解。
给定以下代码:
function multiple(n) {
function f(x) {
return x * n;
}
return f;
}
var triple = multiple(3);
var quadruple = multiple(4);
当我将以下内容传递到控制台时:
console.log(triple(5));
我得到了我期望的结果,即 15。同样,对于任何数字,它都会变成三倍(如果我使用第二个函数,它会变成四倍)。
但是当我在控制台中输入 triple 时,我得到以下代码:
f(x) {
return x * n;
}
控制台不应该返回...
f(x) {
return x * 3;
}
...因为 3 是通过以下代码编码到函数中的:
var triple = multiple(3);
最佳答案
3
未硬编码到函数中。 f
的代码是指变量n
,而不是数字3
。在您的代码中,碰巧没有办法修改 n
,但想象一些代码,其中 有一种修改 n
的方法:
function multiple(n) {
function f(x) {
return x * n;
}
function modifyN(newN) {
n = newN;
}
return { f: f, modifyN: modifyN };
}
var resultFor3 = multiple(3);
var triple = resultFor3.f;
var modifyTripleN = resultFor3.modifyN;
如您所见,n
不是硬编码的;它与任何其他变量没有什么不同。在您的特定示例中,无法在 multiple
终止后修改 n
,但这不会使 调用创建的闭包内部的值多个
以任何方式“硬编码”。
关于javascript - 返回一个函数 Chrome Dev 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400940/