源码地址 https://raw.githubusercontent.com/lodash/lodash/4.17.11-npm/core.js

13行:  var undefined

es5之前 undefined 可以被 window.undefined = '我被覆盖了'这样的操作所覆盖,所以定义了未初始化的undefined,此时undefined变量的值一定是undefined,避免全局undefined变量被覆盖导致判断不准的问题。

74行 var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports

和77行 var freeModule = typeof module == 'object' && object && !module.nodeType && module

检测自由变量exports, module 是否存在,

这里 !exports.nodeType作用:用于确保 exports 不是dom节点 。

由于在新版浏览器中 ,可以不用声明直接获取id的元素, 若定义了类似<div id='epxorts'></div>的话,直接打印 exports 的结果为该dom元素 。

89-92行 ,作用: 将一个数组的每一个元素添加到另一个数组

function arrayPush(array, values) {   array.push.apply(array, values);    return array;
}复制代码

这里用了apply的特性,apply后的第一个参数会代替原函数的this对象,第二个参数为传入函数的参数,且为数组形式, 那么某种程度就相当于变成了 array.push(...values)这样

105-115行,作用: 找到下标,在_.findIndex有引用

function baseFindIndex(array, predicate, fromIndex, fromRight) {    var length = array.length,        index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) {  if (predicate(array[index], index, array)) {return index;      }   }   return -1;
}复制代码

解析:predicate为查找规则,

1. 未传入 fromRight , 检索数组下标大于等于fromIndex的值, index初始值为 fromIndex - 1,循环中先将index + 1(先将多减的 1 加回来)然后判断是否小于数组长度,符合时判断是否符合查找规则

2.传入 fromRight , 检索数组下标小于等于fromIndex的值, index初始值为 fromIndex + 1,循环中先判断 index 是否为真,真时使用 index - 1 作为下标取数组元素传入查找规则

这里官方例子给的predicate参数只有当前元素,其实有三个, 当前元素,当前元素下标,原数组,有需要可以自己组合

124-128行, 作用:找到对象某个键的值,_.property有引用 ,不支持深层查找

 function baseProperty(key) {    return function(object) {      return object == null ? undefined : object[key];    };  }复制代码

137-141行仅是把参数对调了一下

function basePropertyOf(object) {    return function(key) {      return object == null ? undefined : object[key];    };  }复制代码

相当于对传入的object先进行了一步判断是否存在

待续

lodash 核心源码学习(基于4.17.11版本)相关推荐

  1. 读zepto核心源码学习JS笔记(3)--zepto.init()

    上篇已经讲解了zepto.init()的几种情况,这篇就继续记录这几种情况下的具体分析. 1. 首先是第一种情况,selector为空 既然是反向分析,那我们先看看这句话的代码; if (!selec ...

  2. 新书上市 | Vue 3.0 核心源码解析,这本书给Vue学习提供新方法

    Vue.js 作为一款极简的 MVVM 框架,因其轻量.易上手,得到了众多开发者的喜爱. 自从 2014 年 Vue 诞生以来,这个框架设计的初衷,尤大说只是为了设计一个让自己用起来舒服的框架,随着受 ...

  3. Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...

  4. 手撕spring核心源码,彻底搞懂spring流程

    引子 十几年前,刚工作不久的程序员还能过着很轻松的日子.记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决.但是那时候我没有主动学习技术的意识,只 ...

  5. SpringCloud Alibaba——精读Nacos+CMDB+核心源码阅读(7w字长篇)

    文章目录 Nacos 1.介绍 2.使用场景 2.1.动态配置服务 2.2.服务发现及管理 2.2.1.服务注册 2.2.2.服务心跳 2.2.3.服务同步 2.2.4.服务发现 3.环境搭建 3.1 ...

  6. MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)

    MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...

  7. halcon区域腐蚀膨胀算子_超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...

    超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码). 发布时间:2019-03-20 12:32, 浏览次数:1259 , 标签: halcon 我在两年前的博客里 ...

  8. halfstone 原理_HashMap的结构以及核心源码分析

    摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...

  9. 面试官系统精讲Java源码及大厂真题 - 09 TreeMap 和 LinkedHashMap 核心源码解析

    09 TreeMap 和 LinkedHashMap 核心源码解析 更新时间:2019-09-05 10:15:03 人的影响短暂而微弱,书的影响则广泛而深远. --普希金 引导语 在熟悉 HashM ...

最新文章

  1. 敏捷软件开发之何为敏捷开发
  2. python常用面试题_史上最全Python工程师常见面试题集锦,有这一份就够了
  3. Misc-----[2021祥云杯初赛]鸣雏恋 提取压缩包文件图片名8个为一组 转ASC码base64转图片
  4. 美团杯2020 - 平行四边形(原根)
  5. C++ vector容器类型 (摘自漫步云端的博客)
  6. Jquery——hover与toggle
  7. jqgrid 使用小记——与springboot jpa 一起使用的分页,翻页。(使用springboot jpa 原生的分页)...
  8. hdu 3466 Proud Merchants
  9. 2017中国屏幕分辨率统计
  10. 微信小程序中如何应用音频
  11. 如何防止短信API接口遍历
  12. 电脑怎么压缩jpg图片?如何压缩照片并保持清晰?
  13. 高精度电压基准电路-TL431实现
  14. httpclient
  15. html怎么把盒子做成超链接,把整个DIV变成超链接
  16. h5物体拖动_HTML5原生拖拽/拖放(drag drop)详解
  17. 【人工智能项目】缺陷检测分割数据集相关整理分享
  18. Qt编写的项目作品30-录音播放控件(雨田哥作品)
  19. 华为荣耀9升级鸿蒙os,华为荣耀9款手机可升级EMUI 11了!优先升鸿蒙OS
  20. VHDL数字频率计的设计

热门文章

  1. Angular介绍、安装Angular Cli、创建Angular项目入门教程
  2. Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度属性
  3. python的GUI之Tkinter的Label组件
  4. spring的aop的动态代理机制都有哪些_Spring学习(4):Spring AOP
  5. 神策数据:从产品与运营视角,了解教育行业转介绍
  6. 神策数据关海南:营销策略引擎解读,以平台化构建营销新生态
  7. CEO 赠书 | 决策是一个技术活,如何做「对」的事?
  8. 多线程编程学习笔记——任务并行库(二)
  9. 从内容云到一云多屏 云计算助力传统媒体转型
  10. 建立适合大数据成功的团队