zoukankan      html  css  js  c++  java
  • js总结 (2)预编译 闭包 函数立即执行 的各种问题

       几个重点知识

    1.未经声明直接赋值则为全局所有 window

    2.预编译过程

         首先创建AO对象

         形参和变量声明
         形参实参统一
         函数声明覆盖

         var a =function(){ }这是表达式,要调用必须 把 a(); 写在后面。

    3.闭包    return 结果出来,出来的函数带着test 里面的数据(AO)

      

        <script>
                function test() {
                   var num=100;
                   function a() {   // 定义一个a函数 
                     num++;             
                     console.log(num);
                   }
                   function b() {   //定义一个b函数
                     num--;
                     console.log(num);
                   }
                   return[a,b];    //全部给返回回来
                 } 
                var arr=test();
                arr[0]();         //执行a函数
                arr[1]();             //  执行b函数
                </script>    结果是101  100  执行结果 共用一个AO
    View Code

    4.闭包如何解决    用立即执行函数

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4   <meta charset="UTF-8">
     5   <title> </title>
     6   <style>
     7     *{padding: 0;margin:0;list-style: none;}
     8     ul li:nth-of-type(2n){
     9       height: 140px;background-color: #118504;
    10     }
    11      ul li:nth-of-type(2n+1){
    12       height: 140px;background-color: #A6088B;
    13     }
    14   </style>
    15 </head>
    16 <body>
    17 
    18 <ul>
    19   <li>a</li>
    20   <li>a</li>
    21   <li>a</li>
    22   <li>a</li>
    23   <li>a</li>
    24 </ul>
    25      <script>
    26        var li=document.getElementsByTagName('li')
    27        function test() {
    28           for (var i = 0; i <li.length; i++) {
    29             (function c (j) {                  
    30                 
    31                 li[i].onclick=function () {
    32                   alert(j);
    33 
    34                  }
    35 
    36               }(i))
    37 
    38            }
    39        }
    40 
    41       test();
    42 
    43     </script>
    44 </body>
    45 </html>


    5.立即执行函数
    (function (){}());

       深入理解:只有表达式才能被执行符号执行

                  

                    function test(){                    + function test(){
                       console.log(a)                           console.log(a)                                            
    
                       }();这样直接写括号不能执行              }();在函数前面加了一个加号 使得函数变成表达式 这样可以执行     
    

    6.函数递归  

    function fbb(n) {
        if (n==1||n==2) {
            return 1;
        }
        return fbb(n-1)+ fbb(n-2);
    }
      
  • 相关阅读:
    CMSIS_OS中osMailPut 和 osMessagePut 的问题
    网络:W5500抓包TCP segment of a reassembled PDU
    网络:W5500 UDP数据包格式注意事项
    笔记:把编译时间加入到目标文件
    笔记:git和码云
    笔记:git基本操作
    FreeRtos堆栈检测应用
    一个由自增运算符以及C语法顺序细节引起的bug
    高级文件操作
    linux 权限相关
  • 原文地址:https://www.cnblogs.com/nice2018/p/9752833.html
Copyright © 2011-2022 走看看