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以任何方式“硬编码”。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |