JavaScript基础 函数

JavaScript基础

  • 1 函数的定义式
function demo (){
   console.log('demo');
 }
  • 2 函数表达式
var feng = function(){
   console.log('feng');
  }
  • 3 简单类型赋值的是值(互相不影响)
 var a = 20;
 //变量a为变量 b赋值
 var b = a;
 //修改b
 //简单类型赋值的是值,
  b = 30;
 console.log(a,b);  //20  30
  • 4 引用类型赋值的是地址
 var a = function(){
    console.log('只是一个函数');
  }
  var b = a;
  //引用数据类型数可以添加属性,通过点语法添加
   //a和b指向同一个数据,通过b修改数据,a也会受到影响
   b.color = 'red'
   console.log('a',a.color); //a  red 
   console.log(a,b); // f()  f()  函数
  • 5 函数的声明提升
 function feng (num){
   console.log(111,num);
    //定义变量(只声明提升  不赋值)
     var num = 20;
     console.log(333,num);
    //声明函数(执行覆盖操作 最后是函数)
    function num(){
    console.log(111);
  }
 console.log(222,num);
}
feng(10)
  • 步骤
    1.传入一个 10
    2.寻找 num 变量 (只声明提升,不赋值)
    3.找到函数 赋值提升 整体到前面
    4.然后 第一个 输出为函数
    5.num = 20 (函数那个 提升了就没有了 )
    6. 333 222 输出为 20

  • 6 递归函数

        function demo (num){
            if(num <=1){
                return 1
            }
            return num + demo(num-1)
        }
        var result = demo(5)
        console.log(result);

输出为 5 + 4 + 3 +2 + 1 = 15

  • 7 //波非那切数列(num 表示项数)
        function bo(num){
            //临界条件
            if(num === 1 || num === 2){
                // 前2项都是1
                return 1;
            }
            //当前项等于 前 2项之和
            return bo(num-1) + bo(num-2)
        }
        测试
        console.log(bo(1));
        console.log(bo(2));
        console.log(bo(3));
        console.log(bo(4));
        console.log(bo(5));
        console.log(bo(6));
        console.log(bo(7));
输出: 1    1    2    3    5    8   13
  • 8 作用域
        //函数可以锁住变量
        //按照作用域链一层一层向上查找
        var num = 1;
        function fn1(){
            function fn2(){
                //函数在 执行的一瞬间会产生ActiveObject(活动对象)
                //把形参 放在 AO  里 赋值为 undefined
                //如果 fn3()中传入 num 
                //输出 undefined
                function fn3(){
                    console.log(num);
                }   
                fn3();
            }
            fn2();
        }
        fn1();
  • 9 闭包
  • 将内部的函数暴露在外部,就可以访问内部的数据
            function demo(){
                var num = 10;
                function inner(){
                    console.log(num);
                }
                return inner
            }
            var outer = demo();
            console.log(outer);  //输出函数
            // 通过 outer访问内部的数据
            outer() //输出 10

闭包的缺点:无法回收

  • 10 冲突
            function init(x,y){
                // 返回一个 闭包
                return function(y){
                    //x 使用的是 外部的 y 使用的是内部的
                    console.log(x + y);
                }
            }
            //注意:闭包函数本身也是一个作用域
            //与外界产生冲突是 会优先使用内部的数据
            // 里面的 y 代替了 传递的 4 
            //所以  2 + 上add 传入的 5  6  7  =  7  8  9 
            var add = init(2,4)
            add(5)
            add(6)
            add(7)
  • 11 立即执行函数
    1.在函数定义式中,直接在函数后面添加() 有语法错误,
    2.要将函数转成表达式 在function 前 添加一个 + - ~ !
    3.或者用 () 把整个函数包起来
        +function demo(){
            console.log('demo');
        }();
        console.log(demo); //它是表达式了 不能访问demo了
         
        函数定义式
        var demo3 = function demo3(){
            console.log('demo3');
            return 100;
        }()
        console.log(demo3);//  得到的是函数的结果


        -function demo(){
            console.log('demo');
        }();
        ~function demo(){
            console.log('demo');
        }();

        !function demo(){
            console.log('demo');
        }();

        (function demo(){
            console.log('demo');
        })()
  • IIFE(立即执行函数)的返回值 可以参与运算
        var demo = function(){
            return 1000
        }()+200
        console.log(demo); // 输出  1200
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值