• 一.js高级(6)-闭包-定时器-js中代码执行顺序


    闭包1:嵌套的两个作用域中 内层作用域访问外层作用域 局部变量的 过程

    闭包2 :  就是能够访问其他函数内部变量的函数;

        由于js中只有函数内部的子函数才能访问局部变量,所以可以简单的把闭包理解为"定义在函数内部的函数";

        本质上闭包就是连接函数内部和外部的一座桥梁;

     闭包的作用:可以让我们利用函数的作用域保存一些我们需要的变量 

          1.可以解决定时器中无法保存变量的问题  2.节约代码量

    闭包特点:延展了函数的作用域  (可以在函数外部读取成员函数内部)

         闭包函数不会被轻易释放 (让函数始终存活在内存中)

    闭包的缺点: 占用内存

    //j定时器
    
    for(var i=0; i<3; i++){
    
        setTimeout(function(){
            console.log(i);
        },0)
    } // 4 4 4 4

    浏览器执行代码顺序:  先执行栈中的代码, 再执行任务队列中的代码

      执行栈:  script 标签中的代码

      任务队列:  定时器中的函数代码   绑定的事件函数代码

    所以, 定时器中的代码要等到 for循环完成之后再执行

    //闭包中 this 的指向问题
    var
    name = "The Window"; var obj = { name: "My Object", getNameFunc: function () {  return function () {    return this.name;   };   }    }; console.log(obj.getNameFun()() ); //the window

    //1. 定义变量 that 来存储 this的值
    var obj = {
      name = 'the pbj',
      getNameFunc: function () {
          var that = this;  return function () {    return that.name;   };   }

      };
    console.log(obj.getNameFun()() ); //the obj
    //2. 利用bind(this), 将this指向obj

    var object = {    
      name: "My Object",
      getNameFunc: function () {
        return function () {
          return this.name;
        }.bind(this);
       }
     };
    console.log(object.getNameFunc()()); //the obj

     
     
  • 相关阅读:
    在 vue cli3 的项目中配置双服务,模拟 ajax 分页请求
    vue 外部字体图标使用,无须绝对路径引入办法
    json-sever 配置与应用
    使用 phpstudy 搭建本地测试环境
    自调用匿名函数(匿名闭包)解析与调用
    bootstrap-treeview 在 bootstrap 4 不兼容解决办法及使用
    SCSS 在项目中的运用
    题目1020:最小长方形(排除原点)
    题目1018:统计同成绩学生人数(数组或者map)
    大话比特币病毒
  • 原文地址:https://www.cnblogs.com/noraZhang/p/10110457.html
Copyright © 2020-2023  润新知