闭包Closure

104 阅读1分钟

闭包可以让你从内部函数访问外部函数作用域

function init(){
   const name=fern;
   function myName(){
     alert(name)
   }
  myName()
}
init()

浏览器弹出"fern";

function init(){
    const name=fern;
    function myName(){
      alert(name)
    }
    return myName()
}
init()

这样的情况下浏览器也是可以弹出“fern”的

function init(){
    const name=fern;
    function myName(){
       alert(name)
    }
    return myName
}
let a=init()
a()

这样浏览器才会弹出“fern”

这样是弹不出东西来的

把init()打印出来,是myName函数

这样才能打印出来

这样做是因为:return myName 返回的是myName函数体,函数体里面的东西需要另外一个变量去接(接的是return 出来的东西)然后再次执行

这样也可以弹出

function init(x){
    return function(y){
        return x+y
     }
}
let add5 = addfun(2)let add10 = addfun(5)
console.log("add5", add5(5))  //7   console.log("add10", add10(10)) //15

addfun(2)返回的是下面的那个函数体 这个时候x=2

add5(5)调用了那个函数体  这个时候y=5 得到x+y的值   结果为7

addfun(10)同理