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

mac2022-06-30  25

闭包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

   

 

转载于:https://www.cnblogs.com/noraZhang/p/10110457.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)