js闭包

js闭包

徐徐
前端
发布于2024-08-20 16:26:21
🌺前言
js的闭包的一些特性

1.闭包的发生时机:

  • 闭包本质是一个函数,是指那些引用了另一个函数作用域的变量的函数,通常是嵌套函数实现的.
  • 闭包引用那个变量的函数上下文不会立即销毁,除非闭包被销毁.但是执行上下文的作用域链,会在执行完,立马销毁.
javascript
function a() {
   let a = null
    return function () {
       a = 2
      }
  }
 a()

2.闭包的意义:

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

3.执行期上下文

执行期上下文分为全局执行期上下文、函数执行期上下文、eval的执行期上下文,这里总结前两种。
  1. 全局执行期上下文:只有一个,称为GO。
  2. 函数执行期上下文:基于函数定义时的上下文,在被调用或执行前去创建自己的执行期上下文,即为自己的AO。注意:函数执行期上下文由在哪里定义决定,而不是调用时决定。 3.执行期上下文生成过程

• 函数调用前基于函数定义时的作用域链创建自己的AO(执行期上下文),置于作用域链的组顶端 • 查找函数内声明的变量和形参,其值为undefined • 把形参的值变为实参 • 查找函数内的函数声明,其值为函数体

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

javascript
   var name = 'the window';
   var obj = {
      name:'my obj',
      getNameFunc(){
         return function(){
             return this.name
             }
          }
      }
 console.log(obj.getNameFunc()())//the window
    
javascript
 var name = 'the window';
        var obj = {
            name:'my obj',
            getNameFunc(){
                 var that = this
                return function(){
                    return that.name
                }
            }
        }
        console.log(obj.getNameFunc()())//my obj
javascript
 var name = 'the window';
        var obj = {
            name:'my obj',
            getNameFunc(){
                const a = 'eee'
                return function(){ 
                  return a
                }
            }
        }
        console.log(obj.getNameFunc()())//eee

目录

文章最后更新于 2024-08-30 16:34:02
留言
暂无数据

~~空空如也