当前位置:   article > 正文

lodash 核心源码学习(基于4.17.11版本)

exports.nodetype

源码地址 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行 ,作用: 将一个数组的每一个元素添加到另一个数组

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

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

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

  1. function baseFindIndex(array, predicate, fromIndex, fromRight) {
  2. var length = array.length,
  3. index = fromIndex + (fromRight ? 1 : -1);
  4. while ((fromRight ? index-- : ++index < length)) {
  5. if (predicate(array[index], index, array)) {
  6. return index;
  7. }
  8. }
  9. return -1;
  10. }复制代码

解析: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先进行了一步判断是否存在


待续





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/748170
推荐阅读
相关标签
  

闽ICP备14008679号