美文网首页
闭包与this指向

闭包与this指向

作者: 浅忆_0810 | 来源:发表于2020-10-01 10:10 被阅读0次

1. 闭包

1.1 闭包的形成条件:

1、函数嵌套函数

2、内部函数使用了外部函数的变量或者外部函数的参数

1.2 作用:变相的外面使用里面的变量

在闭包中,内部函数使用了外部函数的变量,该变量不会被回收,会像全局变量一样长生不死(除非关闭程序或者网页)

1.3 闭包的优点也是缺点:使用的变量会被永久储存起来(除非关闭程序或者网页)

优点:方便我们对一个变量进行连续性操作。

缺点:使用的变量会永久储存,当你在页面中大量使用闭包的时候,无法垃圾回收机制回收的变量太多的时候,会很消耗内存
function fn1() {
  var num = 10;

  function fn2() {
    num++;
    console.log(num);
  }
  
  return fn2;
}

var fn3 = fn1();
fn3(); // 11
fn3(); // 12

2. this

2.1 默认绑定

  1. 全局环境中,this默认绑定到window

    console.log(this === window); // true
    
  2. 自执行this指向
    函数独立调用时this默认绑定到window

    function fun() {
      console.log(this === window);
    }
    fun(); // true
    
  3. 被嵌套的函数独立调用时this默认绑定到window

    var a = 0;
    var obj = {
      a: 2,
      foo: function () {
        function test() {
          console.log(this.a);
        }
        test();
      }
    }
    obj.foo(); // 0
    
  4. 闭包中里面函数独立调用,而不是方法调用,this默认绑定到window

    var num = 1;
    
    function fn1() {
      var num = 10;
    
      function fn2() {
        console.log(++this.num);
      }
      fn2();
    }
    fn1(); // 2
    

2.2 隐式绑定

  1. 一般被直接对象所包含的函数调用时,也称之为方法调用,this隐式绑定到该直接对象

    function fun() {
      console.log(this.a);
    };
    var obj1 = {
      a: 1,
      foo: fun,
      obj2: {
        a: 2,
        foo: fun
      }
    }
    obj1.foo(); // 1
    obj1.obj2.foo(); // 2
    

2.3 隐式丢失

  1. 隐式丢失是指被隐式绑定的函数丢失绑定对象,从而默认绑定到window
  2. 把函数作为参数传递
  3. 内置函数

3. 改变this指向

call(): 改变函数的this指向,还会马上执行函数
        第一个参数是你想改变的this指向的对象
        后面的其它参数就是该函数的实参

apply():改变函数的this指向,还会马上执行函数
         第一个参数是你想改变的this指向的对象
         第二个参数是数组,数组里面存放函数的实参

bind(): 改变函数的this指向, 不会立马执行函数,在该函数调用的时候才会改变this指向
        第一个参数是你想改变的this指向的对象
        后面的其它参数就是该函数的实参

相关文章

  • 闭包与this指向

    1. 闭包 1.1 闭包的形成条件: 1.2 作用:变相的外面使用里面的变量 1.3 闭包的优点也是缺点:...

  • swift - 闭包的语法与理解

    从函数到闭包 首先来定义一个简单的函数 这里用一个常量来指向函数,闭包其实就是一个变量或者常量来指向闭包(bloc...

  • JavaScript闭包

    有权访问另一个函数作用域内变量的函数都是闭包 闭包存储局部变量 this指向window 对象冒充改变this指向...

  • 对 Groovy 闭包(this、owner、delegate)

    this 指向定义闭包的对象或静态类 owner 跟 this 一样,如果闭包定义在另一个闭包内部,owner 就...

  • 面试总结之基础篇(1)

    深拷贝与浅拷贝 原型与原型链 防抖节流 this 指向 new关键字 深度剖析js闭包

  • Swift 闭包浅解

    闭包的语法 {(参数:类型)-> 返回类型 in执行逻辑return 返回类型} 说明 :1. 闭包主要指向函数...

  • Swift闭包 gekaand

    闭包基础格式 :{(参数:类型) ->返回类型 in执行方法return 返回类型}说明:1;闭包主要指向函数类...

  • 题目

    闭包是什么?闭包的优缺点 this的指向问题? js中的基本类型? (没有object!) typeof 判断类型...

  • 2018-07-10swift4与swift 3.3 语法重拾(

    函数与闭包 闭包

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

网友评论

      本文标题:闭包与this指向

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