javascript作用域闭包

一、什么是作用域闭包

函数在它所声明之外的作用域被执行,此时函数仍然能访问它声明所在作用域内的变量,这就形成了作用域闭包

 

function foo() {
  var a = 100
  function bar() {
    console.log(a)
  }
  
   return bar  // 通过函数名来返回函数的引用
}

var baz = foo() // 外部变量引用了foo函数内部的bar函数
baz() //形成了闭包

 

二、作用域闭包的几种代码实现方式

1. 函数返回一个内部函数,代码形式如上

2. 函数返回一个包含方法的对象

function foo() {
    var a = 100
    function bar() {
        console.log(a)
    }

   return {
      bar: bar
   }
  
}   

var baz = foo()
baz.bar() 

 

3. ECMAScript模块或commonjs模块

var a = 100
function foo() {
   console.log(a)
}

export {foo } // esm模块方式

module.exports = { foo } //commonjs模式

 

4. 函数内部执行回调函数

function foo() {
   var a = 100
   setTimeout(function(){
      console.log(a)

   }, 1000)


}

 

posted @ 2021-06-16 08:20  天边彩虹  阅读(36)  评论(0编辑  收藏  举报