返回功能Chrome开发工具

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)

aps*_*ers 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;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,n它不是硬编码的;它与任何其他变量没有什么不同。n在您的具体示例中,在 终止后无法进行修改multiple,但这不会使通过调用创建的闭包内部的值multiple以任何方式“硬编码”。