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);
}
  
原文地址:https://www.cnblogs.com/nice2018/p/9752833.html