资讯专栏INFORMATION COLUMN

小白读lodash源码(一)未完结,欢迎各种喷

snowell / 2564人阅读

摘要:在函数运行时指定的值。指定的值并不一定是该函数执行时真正的值,如果这个函数处于非严格模式下,则指定为何的值会自动指向全局函数浏览器中就是对象。同时值为原始值数字字符串布尔值的会指向该原始值的自动包装对象。

1、 文件位置

lodashdistlodash.js

2、

;(function() {
}.call(this))   

这个函数的call方法的含义:谁调用它,this就指向当前的环境
 

call()方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。

 fun.call( thisArg[, arg1[, arg2[, ...]]])

thisArg在函数运行时指定的this值。指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为ull何undefined的this值会自动指向全局函数(浏览器中就是window对象)。同时值为原始值(数字、字符串、布尔值)的this会指向该原始值的自动包装对象。

3、

line:400

  /* 
   * Detect free variable `global` from Node.js.
   * 从nodejs中发现自由变量global,就使用nodejs的global 
   */
  
  var freeGlobal = typeof global == "object" && global && global.Object === Object && global;

  /* 
   * Detect free variable `self`. 
   * 发现自由变量self,代表当前作用域
   */
   
  var freeSelf = typeof self == "object" && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function("return this")();
  关于Function("return this")();的用法

4、 lodash和“_”如何被划等号

 
 line:1405
 
 function runInContext(context) {}
 
 line:16705
 
   // Export lodash.

    var _ = runInContext();
    
    // Some AMD build optimizers, like r.js, check for condition patterns like:
      if (typeof define == "function" && typeof define.amd == "object" && define.amd) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    define(function() {
      return _;
    });

 }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
// Export for Node.js.
(freeModule.exports = _)._ = _;
// Export for CommonJS support.
freeExports._ = _;
 }
  else {
// 赋值给全局对象。
root._ = _;
root.lodash = _;}

5、这里如何将lodash imports _ 有何含义?

 
    lodash.templateSettings=  {
    "escape": reEscape,
    "interpolate": reInterpolate,
    ‘variable’: "",
    "imports":{
        
        "_":lodash
    }
};

可以用如下方法调用interpolate

[options.interpolate=_.templateSettings.interpolate]    

原型继承

    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80230.html

相关文章

  • 源码系列4」lodash 是如何实现深拷贝的(下)

    摘要:用于检测自己是否在自己的原型链上如果是函数,则取出该函数的原型对象否则,取出对象的原型对象其中,的判断,是为了确定的类型是对象或数组。相当于,而的构造函数是一个函数对象。 showImg(https://segmentfault.com/img/bVbq2N1?w=640&h=437); 前言 接着上一篇文章 lodash 是如何实现深拷贝的(上),今天会继续解读 _.cloneDee...

    zombieda 评论0 收藏0
  • lodash源码之从slice看稀疏数组与密集数组

    摘要:例如其中的为,但是数组中没有元素,是稀疏数组而每个位置都是有元素的,虽然每个元素都为,为密集数组。那稀疏数组和密集数组有什么区别呢在中最主要考虑的是两者在迭代器中的表现。截取并返回新数组为新数组容器。 卑鄙是卑鄙者的通行证,高尚是高尚者的墓志铭。 ——北岛《回答》 看北岛就是从这两句诗开始的,高尚者已死,只剩卑鄙者在世间横行。 本文为读 lodash 源码的第一篇,后续文章会更新到...

    lijy91 评论0 收藏0
  • Webpack 最佳实践总结(三)

    摘要:这里要介绍的是工作流中的一种很普遍的代码加工流程正常的业务逻辑开发流程需要经过预处理器如或,然后再经过后处理器如进行深加工。 还未看的,可以点击查看上两篇文章哟:Webpack 最佳实践总结(一)、Webpack 最佳实践总结(二) 好了,这篇是第三篇,也是完结篇,我感觉这一篇是最乱的一篇,凑合着看吧,不会让你失望的 整合 CSS 加工流 有时候,前端项目中除了 JavaScript ...

    pkhope 评论0 收藏0
  • Webpack 最佳实践总结(三)

    摘要:这里要介绍的是工作流中的一种很普遍的代码加工流程正常的业务逻辑开发流程需要经过预处理器如或,然后再经过后处理器如进行深加工。 还未看的,可以点击查看上两篇文章哟:Webpack 最佳实践总结(一)、Webpack 最佳实践总结(二) 好了,这篇是第三篇,也是完结篇,我感觉这一篇是最乱的一篇,凑合着看吧,不会让你失望的 整合 CSS 加工流 有时候,前端项目中除了 JavaScript ...

    jerryloveemily 评论0 收藏0
  • lodash源码分析之chunk的尺与刀

    摘要:万条数据依赖读源码之从看稀疏数组与密集数组原理的原理归结起来就是切割和放置。尺在切割之前,需要用尺确定切割的数量。容器的长度刚好与块的数量一致。当与块的数量相等时,表示已经切割完毕,停止切割,最后将结果返回。 以不正义开始的事情,必须用罪恶使它巩固。——莎士比亚《麦克白》 最近很多事似乎印证了这句话,一句谎言最后要用一百句谎言来圆谎。 本文为读 lodash 源码的第二篇,后续文章会...

    ZweiZhao 评论0 收藏0

发表评论

0条评论

snowell

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<