lodash 核心源码学习(基于4.17.11版本)
源码地址 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版本)相关推荐
- 读zepto核心源码学习JS笔记(3)--zepto.init()
上篇已经讲解了zepto.init()的几种情况,这篇就继续记录这几种情况下的具体分析. 1. 首先是第一种情况,selector为空 既然是反向分析,那我们先看看这句话的代码; if (!selec ...
- 新书上市 | Vue 3.0 核心源码解析,这本书给Vue学习提供新方法
Vue.js 作为一款极简的 MVVM 框架,因其轻量.易上手,得到了众多开发者的喜爱. 自从 2014 年 Vue 诞生以来,这个框架设计的初衷,尤大说只是为了设计一个让自己用起来舒服的框架,随着受 ...
- Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...
- 手撕spring核心源码,彻底搞懂spring流程
引子 十几年前,刚工作不久的程序员还能过着很轻松的日子.记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决.但是那时候我没有主动学习技术的意识,只 ...
- 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 ...
- MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)
MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...
- halcon区域腐蚀膨胀算子_超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...
超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码). 发布时间:2019-03-20 12:32, 浏览次数:1259 , 标签: halcon 我在两年前的博客里 ...
- halfstone 原理_HashMap的结构以及核心源码分析
摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...
- 面试官系统精讲Java源码及大厂真题 - 09 TreeMap 和 LinkedHashMap 核心源码解析
09 TreeMap 和 LinkedHashMap 核心源码解析 更新时间:2019-09-05 10:15:03 人的影响短暂而微弱,书的影响则广泛而深远. --普希金 引导语 在熟悉 HashM ...
最新文章
- 成功之路该如何走--工作半年的思考
- Java的三种代理模式简述
- 告诉你Hadoop是什么
- linux生成文件清单,Linux 获取文件名称生成列表 txt - create_filelist
- centos 6.7 openssh 升级到openssh 7.1p
- [翻译] JNWSpringAnimation
- c++ log 打印android_如何在Android C++文件中打印ALOGI(...)?
- unity 调c++的dll
- 专科计算机毕业论文范文 致谢,大专毕业设计致谢模板(精选范文3篇)
- spss26没有典型相关性分析_【spss典型相关分析】数学建模__SPSS_典型相关分析
- 社交网络分析之关系图(原理+Python代码)
- 计算机播放音乐自录,如何录制电脑内部播放的声音及音乐
- java 制作甘特图,看我如何用简单的步骤打造出复杂的web甘特图
- MyBioSource丨人Hif1αelisa试剂盒解决方案
- 《杰克.韦尔奇自传》读书笔记
- 打破安逸,追求卓越的6个不要 - This is Daloong‘s blog
- 【网络科普】Wi-Fi 安全接入方法 - WEP, WPA, WPS
- 1. 读取excel文件的辛酸之旅
- 安卓上有哪些好用的时间管理待办清单便签APP?
- PC寄存器 -- 读书摘抄
热门文章
- Vue中使用v-for实现一对多数据的2层和3层嵌套循环
- Vue本地执行build之后打开dist目录下index.html正常访问
- Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题
- Winform中使用FastReport实现自定义PDF打印预览
- SpringBoot+Swagger2.7.0实现汉化(2.8.0不行)
- Python实现将图片转字符画
- 一个独立测试组织工作的五大方面
- python中循环的技巧
- jsp mysql demo_利用JSP+MYSQL实现注册+登入的demo----0001
- graphpad的折线图x轴自定义_Graphpad Prism绘制折线图