• javascript基础之函数


    javascript的函数定义与python有很大的区别,的记住格式就好,下面请看代码

    // 函数
    // 简单定义
    function func() {
        console.log('hello word')
    }
    func(); // 函数的调用
    function f2(a,b){
        console.log('参数的个数',arguments.length);
        console.log('查看函数的属性:',arguments);
        return a*b;
    }
    var ret2=f2(3,4);
    console.log('函数的返回值:',ret2);
    // 匿名函数
    var f3 =function(a,b) {
        console.log('a:',a);
        console.log('b:',b);
        return a+b;
    };
    var ret3=f3(4,5);
    console.log('返回值',ret3);
    // 立即执行函数
    (function (a,b) {
        console.log('立即执行函数,可以有返回值');
        return a % b;
    })
    var ret4=(3,4);
    console.log('立即执行函数的返回值',ret4);
    // 匿名函数的简写
    var f5 = (a,b ) => a/b ;
    var ret5=f5(2,2);
    console.log('返回值',ret5)

     javascript的函数可以多传值,但是只有只会取前面几个有效值。

    也可以少传值,但是没传的地方当做undefined的字符串处理,有可能会报错,也有可能返回NuN之类的值(3+undefined的返回值就是一个不是数字)

    函数中的命名空间(全局变量和局部变量)

    与python相似的是局部可以去到全局去拿某个变量,但是不会改变其值,

    var a =5;
    function f6(a){
        a +=2;
        console.log('我是函数的a:',a);
    }
    f6(a);
    console.log('我是全局的a:',a);

     注意,如果全局里面有个变量,某个函数调用了他,但是函数的参数中没有提到他,这个变量就相当于一个全局变量,在函数内部的改变会影响外部变量的值;

    var a =5;
    function f6(){
        a +=2;
        console.log('我是函数的a:',a);
    }
    f6();
    console.log('我是全局的a:',a);

    这是a的值就会改变了,最后输出的结果为7,7。

    输出结果说明会局部不会改变全局的变量。

    闭包:

    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();

    在javascript中的全部变量和局部变量满足一个叫词法分析的规则见下面:

    当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:

    1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。
    2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。
    3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。

    函数内部无论是使用参数还是使用局部变量都到AO上找。

    看看老师的两个例题:

    var age = 18;
    function foo(){
      console.log(age);
      var age = 22;
      console.log(age);
    }
    foo();  // 问:执行foo()之后的结果是?

    输出结果是 

    undefined
    22

    如果是python会直接报错,但是javascript不会,它会判断只是一个没有定义的变量。所以在没有赋值的情况下显示undefined。

    对比一下python代码

    a=5
    def fun1():
        print(a)
        a=6
        print(a)
    try:
        fun1()
    except UnboundLocalError:
        print("UnboundLocalError: local variable 'a' referenced before assignment")
    print(a)
    View Code

    请看下面的终极代码

    var age = 18;
    function foo(){
      console.log(age);
      var age = 22;
      console.log(age);
      function age(){
        console.log("呵呵");
      }
      console.log(age);
     var age =33; } foo();
    // 执行后的结果是?

    输出结果:

    1把2覆盖了

    而且函数的级别比变量级别高,所以没有返回undifined。

  • 相关阅读:
    【BZOJ5286】[HNOI2018]转盘(线段树)
    【BZOJ2003】[HNOI2010]矩阵(搜索)
    【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
    【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
    【BZOJ2001】[HNOI2010]城市建设(CDQ分治,线段树分治)
    【BZOJ1925】[SDOI2010]地精部落(动态规划)
    【BZOJ1856】[SCOI2010]字符串(组合数学)
    【BZOJ1826】[JSOI2010]缓存交换(贪心)
    【BZOJ1823】[JSOI2010]满汉全席(2-sat)
    【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)
  • 原文地址:https://www.cnblogs.com/accolade/p/10645375.html
Copyright © 2020-2023  润新知