javascript - 返回一个函数 Chrome Dev 工具

标签 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);

当我将以下内容传递到控制台时:

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/

相关文章:

javascript - 将 Laravel 变量传递给 Vue.js

javascript - 如何使用回调函数在 Node js 中返回 api 响应

javascript - 在日历行/列中添加天数数组

function - 从弹出窗口调用后台函数

javascript - 为什么要在模态解析上声明一个函数

css - 显示通过 Chrome 开发者工具所做的所有更改

javascript - 转到 Chrome 开发工具扩展中的源代码行?

javascript - 不明白为什么 Canvas 没有被编辑

scala - spark sql中sc.broadcast和broadcast函数的区别

css - Google Chrome 开发者工具不在 css 旁边显示 css 文件名