参数默认值

  • 参数 ```javascript function test(a=1,b=2){ console.log(a,b)//a=1,b=1; } test(undefined,1)
  1. - **形参 实参谁的值不是undefined,就取谁的;**
  2. ```javascript
  3. function test(a=undefined,b=2){
  4. console.log(a,b)//a=1,b=2
  5. }
  6. test(1,undefined);
  • 新版本和老版本服务器兼容问题

    1. function test(a,b){
    2. var a = arguments[0]||1;
    3. var b = arguments[0]||2;
    4. //或者
    5. var a = typeof(a)!=='undefined'?a:1;
    6. var b = typeof(b)!=='undefined'?b:2;
    7. console.log(a,b);
    8. }

    递归

  • 找到规律

  • 找到出口

    1. //n的阶乘
    2. function nMul (n){
    3. if(n==1){
    4. return 1
    5. }
    6. return n*nMul(n-1);
    7. }
    8. nMul(5)//120

    预编译

    过程

  • 检查通篇语法错误 如果有、整个代码都不执行

  • 预编译
  • 解释一行,编译一行

    变量提升

    函数声明整体提升,变量只有声明提升,赋值不提升。

    1. test();
    2. function test(){
    3. console.log(1) //1
    4. }
    5. console.log(a);//undefined变量提升
    6. var a = 10;

    暗示全局变量 Imply global variable

  • 没有声明就赋值变量

  • 全局不声明,直接挂在到window
    1. a=10;// 等同于 window.a;
    2. function test(){
    3. var a = b = 1;//1:var a->全局声明b -> b=1 ->a = b;
    4. }
    5. test();
    6. console.log(b) //b=1;
    7. console.log(window.b)//b=1;
    8. console.log(a)//a is not defined
    9. console.log(window.a) //undefined

    AO 活跃对象 (activation object)

  1. 找到形参和变量声明
  2. 形参和实参相对应
  3. 找到函数声明,赋值。
  4. 执行 ```javascript function test(a){ console.log(a);//function(){}; var a =21; console.log(a);//21 function a(){}; console.log(a);//21 var a = function(){console.log(‘我是一个函数’)} console.log(a);// function(){console.log(‘我是一个函数’)} } test(123) /**
  • 解释过程:1.a;2:a=21;3:a=function(){}; */ ```

    GO

  1. 找到变量声明
  2. 找到函数声明,赋值
  3. 执行。

例子:
AO 例子1

  1. function test(a, b) {
  2. console.log(a);//5 undefined
  3. c = 0;
  4. var c;
  5. a = 5;
  6. b = 6;
  7. console.log(b);//6
  8. function b() { }
  9. function d() { }
  10. console.log(b);//6
  11. }
  12. test();
  13. /**
  14. * AO :{
  15. * a:undefined->,
  16. * b:undefined->function b(){}->6
  17. * c:undefined
  18. * d:function d(){}
  19. * }
  20. */