js总结 (2)预编译 闭包 函数立即执行 的各种问题

mac2022-06-30  67

   几个重点知识

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

最新回复(0)