美文网首页程序员技术栈
深入解析bind原理

深入解析bind原理

作者: ing1023 | 来源:发表于2019-06-12 23:04 被阅读1次

在解析bind之前我们先看一道题:

function f() {
    console.log(this)
}
let f1 = f.bind(1).bind(2)
f1()

上边的题等同于

let  temp = f.bind(1)
let f1 = temp.bind(2)
f1()
// 首先temp是f.bind(1)的结果,即:
temp = function () {
          f.apply(1)
       }
// 这里改变的是f的this,指向1。
f1 = function () {
    temp.apply(2)
}
// 重点:f1()执行的时候改变的是temp的this,而不是f的this。
// 即f1()的时候是调用temp.apply(2),通过temp.apply(2)再去调用f.apply(2)。
// 所以不论中间有多少层bind,最后那个f调用永远都是最开始的1。

==============================================================================================================
let temp = f.bind(1);
let f1 = temp.bind(2);
let f2 = f1.bind(3);
let f3 = f2.bind(4);
let f4 = f3.bind(5);
f4();

f4() => f3.apply(5) => f2.apply(4) => f1.apply(3) => temp.apply(2)=>f.apply(1)

bind的基本实现原理(参数那个我没有去写了,关注重点)

Function.prototype.bind = function(arg) {
    var _this = this;
    return function () {
        _this.apply(arg)
    }
}

bind的作用是永久改变一个函数执行过程中的this,它的基本实现:
1.bind的执行不会立即执行需要改变this指向的函数;
2.bind执行后返回一个新函数.

知识点:闭包(阻止垃圾回收)
内层函数可以访问外层函数中的变量
内层:return后面的函数
外层:bind函数
因为形成闭包,所以即使bind已经执行完成,但是因为return的函数被外部引用,所以bind中的arg并没有被回收,这样后续无论什么时候调用return出去的函数都能访问到参数arg。

相关文章

  • 深入解析bind原理

    在解析bind之前我们先看一道题: 上边的题等同于 bind的基本实现原理(参数那个我没有去写了,关注重点) bi...

  • 基础篇

    《SPRING技术内幕:深入解析SPRING架构与设计原理》、《Spring源码深度解析》

  • docker进阶必读

    引用段落Docker 核心技术与实现原理深入解析Docker 架构原理

  • CentOS 7搭建DNS服务器

    安装bind 配置bind 添加正向解析域 添加反向解析域 启动bind 检查配置 本地测试解析 将本机的DNS修...

  • Call-apply-bind实现

    call apply bind 原理解析和实现 call 概念:简单来说就是当我执行 A 方法的时候,希望通过传入...

  • Linux就该这么学 | 第13章 部署域名解析服务

    第13章:使用 BIND 提供域名解析服务 本章学习内容:DNS域名解析服务的原理及其作用;域名查询功能中的正向解...

  • Underscore源码阅读:bind

    bind函数 参考:JavaScript深入之bind的模拟实现 bind(function, object, *...

  • MJExtension原理深入解析

    MJExtension概述 MJExtension是是一个非常易用且功能强大的第三方Model和JSON相互转化的...

  • 深入解析HashMap原理(基于JDK1.8)

    本文参考:深入解析HashMap原理[https://blog.csdn.net/qq_37113604/arti...

  • bind的模拟实现

    原文出处 JavaScript深入之bind的模拟实现 bind 我们在模拟 bind之前,先看看 bind实现了...

网友评论

    本文标题:深入解析bind原理

    本文链接:https://www.haomeiwen.com/subject/ceirfctx.html