范围调用函数内部的函数

 全球不懂我_934 发布于 2023-02-13 12:55

希望有人找到时间来解释函数和范围中的函数.我试图更多地了解变量的函数和范围,并找到了一个相当不错的教程,但这部分我只是没有得到.

任务:

创建一个像这样工作的函数sum:sum(a)(b) = a+b并接受任意数量的括号.例子:

sum(1)(2) == 3
sum(5)(-1)(2) == 6

解决方案:

function sum(a) {

    var sum = a;

    function f(b){
        sum += b;
        return f;
    }

    f.toString = function() { return sum };

    return f;         //line 12
}

alert( sum(1)(2) );   // 3e

说明:

要使sum(1)可调用为sum(1)(2),它必须返回一个函数.该函数可以被调用或转换为数字valueOf.解决方案真的不言自明:

我的解释:

ffunction f(b)返回到范围,该范围是从管线02 - 12 ff.toString,为当前返回ffunction(b) 接下来return f返回到其是功能以外的范围sum(a).

问题:

我无法弄清楚,我需要以不同的方式思考,因为就像我上面所描述的那样,函数不会被再次调用,那么代码的哪一部分可以使"几个括号"成为可能?

而且,我是否正确地假设fs返回的位置?如果有人会给出一些解释,那将会很棒.

1 个回答
  • 该函数sum返回一个函数,我们称之为f.

    该函数f还返回一个函数:实际上,函数f返回自身.

    当函数f在其中定义时sum,它可以永久访问范围链中当前可见的所有变量.这里,它包括本地定义的变量sum(本地运行总计)和f(函数本身).("闭包"就是我们所说的功能代码f及其所有范围内变量.)

    因为f返回自己,你可以f重复调用链接:

    var this_is_f = sum(1);
    var same_f_again = this_is_f(2);
    var f_a_third_time = same_f_again(3);
    

    或者干脆:

    sum(1)(2)(3);
    

    重要的是要注意,在我的第一个例子中,我没有创建新的功能; 相反,我只是引用具有三个不同标识符的完全相同的函数对象.

    每次调用sum都会在其范围内创建一个f全新的本地sum(这里,我指的sum是在名为函数的第一行定义的本地sum).但是,调用函数sum不会破坏任何旧函数f,因为每次调用都会sum实例化一个新函数f(并且f对之前调用时创建的任何其他函数一无所知sum).这样,你可以运行多个标签:

    var first_tally = sum(1)(2);   // first: 3
    var second tally = sum(4)(5);  // second: 9
    first_tally(3);   // first: 6
    second_tally(6);  // second: 15
    

    你能够随时看到有意义的结果的原因是它会f玷污它的价值sum,而不是向你展示它的源代码.

    2023-02-13 12:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有