javascript - 函数的返回值是函数时,这个返回值里面函数的参数和外层函数参数的联系?

查看:72
本文介绍了javascript - 函数的返回值是函数时,这个返回值里面函数的参数和外层函数参数的联系?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

下面这只是个例,请问propertyName和object1,object2有什么联系?请推广到一般情况下

<script type="text/javascript">
        function createComparisonFunction(propertyName) {
            return function(object1, object2){
                var value1 = object1[propertyName];
                var value2 = object2[propertyName];
  
                if (value1 < value2){
                    return -1;
                } else if (value1 > value2){
                    return 1;
                } else {
                    return 0;
                }
            };
        }
 
        var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
         
        data.sort(createComparisonFunction("name"));
        alert(data[0].name);  //Nicholas
         
        data.sort(createComparisonFunction("age"));
        alert(data[0].name);  //Zachary        
 
    </script>

解决方案

也不分析那么多了,直接来看一下你这函数的执行步骤吧。

  1. 申明了一个变量data;

  2. 申明了一个函数createComparisonFunction;

  3. 变量data赋值了一个数组引用;

  4. data数组调用自身的sort方法,并传入了一个立即执行函数

    4.1 立即执行函数执行接收一个参数propertyName,并返回闭包中一个匿名函数
    4.2 sort开始快排,每次比较双方大小的时候调用闭包中的匿名函数,并传入两个左右两个参数
        4.2.1 匿名函数读取闭包中的propertyName变量并开始执行相关逻辑
        // ...
    
    

后面的分析就不想写了,看到这里不知道题主明白了没有
核心是产生了一个闭包。

更新一个跟闭包相关的文档,让题主更方便理解

闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。换句话说,这些函数可以记忆它被创建时候的环境。

https://developer.mozilla.org...

这篇关于javascript - 函数的返回值是函数时,这个返回值里面函数的参数和外层函数参数的联系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆