V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
thianda

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

  •  
  •   thianda · Aug 21, 2018 · 4108 views
    This topic created in 2807 days ago, the information mentioned may be changed or developed.
    /**
     * 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 replies    2018-09-09 18:56:52 +08:00
    epkT6QJ3RSaz6AnJ
        1
    epkT6QJ3RSaz6AnJ  
       Aug 21, 2018
    这个显然不是标准的 bind,应该是 vue 的私有实现,性能优化了。
    epkT6QJ3RSaz6AnJ
        4
    epkT6QJ3RSaz6AnJ  
       Aug 21, 2018   ❤️ 1
    新的注释了解下,浏览器应该没有性能问题了,只是 polyfill
    mcfog
        5
    mcfog  
       Aug 21, 2018 via Android
    忘记是 underscore 还是 backbone 了还列举了 2 / 3 / 4 / 5 个参数的 case 呢 23333
    zhzer
        6
    zhzer  
       Aug 21, 2018
    这么写,是因为 apply 有性能问题吗?
    thianda
        7
    thianda  
    OP
       Aug 21, 2018
    @zhzer 正如 @epkT6QJ3RSaz6AnJ 所回复,现在只是为了兼容旧版做的 polyfill
    xieranmaya
        8
    xieranmaya  
       Sep 9, 2018 via Android
    就是把只接收一个参数的情况单列出来
    node 的 event emmiter 里也有这种用法
    把传一个,两个,三个,甚至四个的情况分别列出来,更多的才用 apply
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1004 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    ♥ Do have faith in what you're doing.