源码地址 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. Java的三种代理模式简述
  3. 告诉你Hadoop是什么
  4. linux生成文件清单,Linux 获取文件名称生成列表 txt - create_filelist
  5. centos 6.7 openssh 升级到openssh 7.1p
  6. [翻译] JNWSpringAnimation
  7. c++ log 打印android_如何在Android C++文件中打印ALOGI(...)?
  8. unity 调c++的dll
  9. 专科计算机毕业论文范文 致谢,大专毕业设计致谢模板(精选范文3篇)
  10. spss26没有典型相关性分析_【spss典型相关分析】数学建模__SPSS_典型相关分析
  11. 社交网络分析之关系图(原理+Python代码)
  12. 计算机播放音乐自录,如何录制电脑内部播放的声音及音乐
  13. java 制作甘特图,看我如何用简单的步骤打造出复杂的web甘特图
  14. MyBioSource丨人Hif1αelisa试剂盒解决方案
  15. 《杰克.韦尔奇自传》读书笔记
  16. 打破安逸,追求卓越的6个不要 - This is Daloong‘s blog
  17. 【网络科普】Wi-Fi 安全接入方法 - WEP, WPA, WPS
  18. 1. 读取excel文件的辛酸之旅
  19. 安卓上有哪些好用的时间管理待办清单便签APP?
  20. PC寄存器 -- 读书摘抄

热门文章

  1. Vue中使用v-for实现一对多数据的2层和3层嵌套循环
  2. Vue本地执行build之后打开dist目录下index.html正常访问
  3. Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题
  4. Winform中使用FastReport实现自定义PDF打印预览
  5. SpringBoot+Swagger2.7.0实现汉化(2.8.0不行)
  6. Python实现将图片转字符画
  7. 一个独立测试组织工作的五大方面
  8. python中循环的技巧
  9. jsp mysql demo_利用JSP+MYSQL实现注册+登入的demo----0001
  10. graphpad的折线图x轴自定义_Graphpad Prism绘制折线图