V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
thianda
V2EX  ›  JavaScript

这段 js 有什么用?? Simple bind, faster than native???

  •  
  •   thianda · 2018-08-21 19:08:53 +08:00 · 3425 次点击
    这是一个创建于 2047 天前的主题,其中的信息可能已经有所发展或是发生改变。
    /**
     * Simple bind, faster than native
     */
    function bind (fn, ctx) {
      function boundFn (a) {
        var l = arguments.length;
        return l
          ? l > 1
            ? fn.apply(ctx, arguments)
            : fn.call(ctx, a)
          : fn.call(ctx)
      }
      // record original fn length
      boundFn._length = fn.length;
      return boundFn
    }
    

    大概意思我懂,但是a是从哪来的? 这个bind有什么意义?

    8 条回复    2018-09-09 18:56:52 +08:00
    epkT6QJ3RSaz6AnJ
        1
    epkT6QJ3RSaz6AnJ  
       2018-08-21 20:11:12 +08:00
    这个显然不是标准的 bind,应该是 vue 的私有实现,性能优化了。
    epkT6QJ3RSaz6AnJ
        4
    epkT6QJ3RSaz6AnJ  
       2018-08-21 20:15:58 +08:00   ❤️ 1
    新的注释了解下,浏览器应该没有性能问题了,只是 polyfill
    mcfog
        5
    mcfog  
       2018-08-21 20:26:15 +08:00 via Android
    忘记是 underscore 还是 backbone 了还列举了 2 / 3 / 4 / 5 个参数的 case 呢 23333
    zhzer
        6
    zhzer  
       2018-08-21 20:29:57 +08:00
    这么写,是因为 apply 有性能问题吗?
    thianda
        7
    thianda  
    OP
       2018-08-21 23:43:38 +08:00
    @zhzer 正如 @epkT6QJ3RSaz6AnJ 所回复,现在只是为了兼容旧版做的 polyfill
    xieranmaya
        8
    xieranmaya  
       2018-09-09 18:56:52 +08:00 via Android
    就是把只接收一个参数的情况单列出来
    node 的 event emmiter 里也有这种用法
    把传一个,两个,三个,甚至四个的情况分别列出来,更多的才用 apply
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2811 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:35 · PVG 21:35 · LAX 06:35 · JFK 09:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.