立即执行函数与闭包

function a() {
     function b() {
         function c() {

         }
         c()
     }
     b()
 }
 a()
 a defined a.[[scope]] --> 0:GO

 a doing   a.[[scope]] --> 0:aAO
                           1:GO

 b defined b.[[scope]] --> 0:aAO
                           1:GO

 b doing   b.[[scope]] --> 0:bAO
                       --> 1:aAO
                       --> 2:GO

 c defined c.[[scope]] --> 0:bAO
                       --> 1:aAO
                       --> 2:GO

 c doing   c.[[scope]] --> 0:cAO
                       --> 1:bAO
                       --> 2:aAO
                       --> 3:GO

 /**
  * 闭包
  * @returns {b}
  */
 function a() {
     function b() {
         var bbb = 234;
         console.log(aaa)
     }
     var aaa = 123;
     return b
 }
 var demo = a()
 demo() //123

 function a() {
     var num = 100;
     function b() {
         num++
         console.log(num)
     }
     return b
 }
 var demo = a()
 demo() //101
 demo() //102

 function test() {
     var num = 100;
     function a() {
         num++;
         console.log(num)
     }
     function b() {
         num--;
         console.log(num)
     }
     return [a,b]
 }
 var temp = test()
 temp[0](); //101
 temp[1](); //100

 function enter() {
     var food = "";
     var obj={
         eat:function () {
             console.log(food)
             food=""
         },
         push:function (myfood) {
             food=myfood
         }
     }
     return obj
 }
 var test = enter()
 test.push("banana")
 test.eat();//banana
 /**
  * 立即执行函数
  * 可以有返回值
  * 只有表达式才能被立即执行
  */
 var num = (function () {
     return 10
 }())
 console.log(num) //10
 
 var num = function () {
     console.log("a")
     }() //a

 /**
  * 闭包与立即执行函数
  */
 function test() {
     var arr=[];
     for(var i=0;i<10;i++){
         arr[i] = function () {
             console.log(i)
         }
     }
     return arr
 }
 var myarr = test()

for(var j = 0;j<myarr.length;j++){
myarr[j]() // 10个10
// }
//如何输出0-9
 把var 改成let
 function test() {
     var arr=[];
     for(let i=0;i<10;i++){
         arr[i] = function () {
             console.log(i)
         }
     }
     return arr
 }
 var myarr = test()

 for(var j = 0;j<myarr.length;j++){
     myarr[j]() // 0-9
 }
 //立即执行函数
  function test() {
      var arr=[];
      for(let i=0;i<10;i++){
          (function (j) {
              arr[j] = function () {
                  console.log(i)
              }
          }(i))

      }
      return arr
  }
  var myarr = test()

  for(var j = 0;j<myarr.length;j++){
      myarr[j]() // 0-9
  }
 输出0-4
 for(var i=0;i<5;i++){
     (function (i) {
         setTimeout(function () {
             console.log(i)
         },0)
     }(i))
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值