几个重点知识
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
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);
}