Joh*_*dge 6 javascript function google-chrome-devtools
这个问题可以在别处回答,但我甚至不确定如何开始寻找答案.我是JavaScript的新手,所以这个让我很难理解.
给出以下代码:
function multiple(n) {
function f(x) {
return x * n;
}
return f;
}
var triple = multiple(3);
var quadruple = multiple(4);
Run Code Online (Sandbox Code Playgroud)
当我将以下内容传递到控制台时:
console.log(triple(5));
Run Code Online (Sandbox Code Playgroud)
我得到了我期望的结果,即15.同样,任何数字都会增加三倍(如果我使用第二个函数,则会增加四倍).
但是当我在控制台中键入三元组时,我得到以下代码:
f(x) {
return x * n;
}
Run Code Online (Sandbox Code Playgroud)
控制台不应该返回......
f(x) {
return x * 3;
}
Run Code Online (Sandbox Code Playgroud)
...因为3通过以下代码编码到函数中:
var triple = multiple(3);
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,n
它不是硬编码的;它与任何其他变量没有什么不同。n
在您的具体示例中,在 终止后无法进行修改multiple
,但这不会使通过调用创建的闭包内部的值multiple
以任何方式“硬编码”。