参数默认值

    1. function test(a = 1 , b){
    2. console.log( a , b) // 1,2
    3. }
    4. test(undefined,2)
    5. function test2(a = undefined , b){
    6. console.log( a , b) // 1,2
    7. }
    8. test2(1,2)

    优先选择有值的,这个是es6的特性,在es5以前都不可以,

    递归

    1. function fb(num){
    2. if(num === 1){ retunr 1}else {
    3. return num * fb(num - 1)
    4. }
    5. }
    6. fb(5)
    7. /*
    8. * 可以理解为找入口和出口
    9. */
    10. 出口就是 有一个特定值的地方
    11. function fb(5){
    12. return 5 * fb(4)
    13. fb(4) = 4 * fb(3)
    14. fb(3) = 3 * fb(2)
    15. fb(2) = 2 * fb(1)
    16. fb(1) = 1
    17. }
    1. function multiple(a){
    2. if(a < 2 ) {
    3. return 1
    4. }else if( a > 3){
    5. return multiple(a -1) + multiple(a - 2)
    6. }
    7. }
    8. // 分解为
    9. function multiple(5){
    10. return multiple(4) + multiple(3)
    11. multiple(4) = multiple(3) + multiple(2)
    12. multiple(3) = multiple(2) + multiple(1)
    13. multiple(2) = multiple(1) = 1
    14. }

    预编译
    1.检查通篇语法错误
    1.5 预编译过程
    2.解释一行,执行一行

    AO:{
    1.形参和变量 声明
    2.实参值赋值给形参
    3.寻找函数声明
    4.执行函数
    }

    GO:{
    1.声明变量
    2.寻找函数声明
    4.执行函数
    }

    1. console.log(a) // undefined
    2. var a = 10;
    3. // 声明提升 ,赋值不提升
    1. console.log(a)
    2. function a (){ consoloe.log('a') }
    3. var a = 10;

    暗示全局变量 (全局域 都归window所有)

    1. var a = 10
    2. var b = 1
    3. //全局window对象
    4. console.log( window.a , window.b) // 10, 1
    5. window {
    6. a : 10,
    7. b : 1
    8. }
    1. function test(){
    2. var a = b = 1;
    3. }
    4. test()
    5. console.log( b ) // 1 这种赋值方式直接在window对象上挂摘了
    6. console.log( window.a) // undefined 只要是对象尚不存在的属性都是undefined
    7. console.log( a ) // 报错

    例子

    1. function test(a,b){
    2. console.log(a)
    3. c = 0
    4. var c ;
    5. a = 5;
    6. b = 6;
    7. console.log(b);
    8. function b(){}
    9. function d(){}
    10. console.log(b);
    11. }
    12. test(1)
    13. 过程:
    14. 1.Ao:{
    15. a:undefined => 1 形参赋值
    16. b:undefined => function(){} 函数声明 覆盖
    17. c: undefined
    18. d:function(){ }
    19. }
    20. 2. Ao:{
    21. a: 1 => 5 执行语句 赋值
    22. b: function(){} => 6
    23. c: undefined => 0
    24. d:function(){ }
    25. }