一.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

 
 

猜你喜欢

转载自www.cnblogs.com/noraZhang/p/10110457.html