zoukankan      html  css  js  c++  java
  • 一.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

     
     
  • 相关阅读:
    Datawhale文化运营 —— 推文排版
    Datawhale文化运营 —— 策划活动
    Datawhale文化运营 —— 选题
    Datawhale文化运营 —— 分析公众号运营
    前端面试——记一次于某司的经历
    Win10+Cent7双系统安装
    梳理 Opengl ES 3.0 (五)shader运行原理
    梳理 Opengl ES 3.0 (三)顶点坐标变换
    梳理 Opengl ES 3.0 (二)剖析一个GLSL程序
    梳理 Opengl ES 3.0 (一)宏观着眼
  • 原文地址:https://www.cnblogs.com/noraZhang/p/10110457.html
Copyright © 2011-2022 走看看