背景

js闭包

徐徐
前端
发表于 2024-08-20 16:33:43
🌺 摘要
js闭包的实现

闭包

1.闭包的发生时机

闭包本质是一个函数,是指那些引用了另一个函数作用域的变量的函数,通常是嵌套函数实现的. 闭包引用那个变量的函数上下文不会立即销毁,除非闭包被销毁.但是执行上下文的作用域链,会在执行完,立马销毁.

function a() {
  let a = null;
  return function () {
    a = 2;
  };
}
a();

2.闭包的意义:

  1. 延长了变量的生命周期.
  2. 创建私有环境

 3.执行期上下文

     * 执行期上下文分为全局执行期上下文、函数执行期上下文、eval的执行期上下文,这里总结前两种。*

  1. 全局执行期上下文:只有一个,称为GO。
  2. 函数执行期上下文:基于函数定义时的上下文,在被调用或执行前去创建自己的执行期上下文,即为自己的AO。注意:函数执行期上下文由在哪里定义决定,而不是调用时决定。
  3. 3. 执行期上下文生成过程
  • 函数调用前基于函数定义时的作用域链创建自己的AO(执行期上下文),置于作用域链的组顶端
  • 查找函数内声明的变量和形参,其值为undefined
  • 把形参的值变为实参
  • 查找函数内的函数声明,其值为函数体

函数不能直接访问其他函数的this和arguments

var name = "the window";
var obj = {
  name: "my obj",
  getNameFunc() {
    return function () {
      return this.name;
    };
  },
};
console.log(obj.getNameFunc()()); //the window
var name = "the window";
var obj = {
  name: "my obj",
  getNameFunc() {
    var that = this;
    return function () {
      return that.name;
    };
  },
};
console.log(obj.getNameFunc()()); //my obj
var name = "the window";
var obj = {
  name: "my obj",
  getNameFunc() {
    const a = "eee";
    return function () {
      return a;
    };
  },
};
console.log(obj.getNameFunc()()); //eee
文章最后更新于 2024-08-20 16:33:43
作者:徐徐
转载请注明出处
上一篇:前端拨号的方法
下一篇:echarts进度条