zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    docker 会这些也够
    Linux 学会这些基本可以啦
    xxxxxxxxx
    Angular
    mongo
    node
    git clone 解决Permission Denied (publickey)问题
    vue项目如何刷新当前页面
    vue——动态路由以及地址传参
    vue 单页应用点击某个链接,跳转到新页面的方式
  • 原文地址:https://www.cnblogs.com/accolade/p/10645375.html
Copyright © 2011-2022 走看看