zoukankan      html  css  js  c++  java
  • JavaScript——函数

    一、函数的定义与调用(与python类同) 

    // 无参函数
    function f1() {
      console.log("Hello world!");
    };
    f1();
    
    // 有参数函数
    function f2(a, b) {
      console.log(arguments);  // 内置的arguments对象
      console.log(arguments.length);
    
      console.log(arguments[0],arguments[1]);
      console.log(a, b);
    };
    f2(10,20);
    
    // 带返回值的函数
    function sum(a, b){
      return a + b;
    }
    sum(1, 2);  // 调用函数
    
    // 匿名函数
    var sum = function(a, b){
      return a + b;
    }
    sum(1, 2);
    
    // 立即执行函数
    (function(a, b){
      return a + b;
    })(1, 2);

    二、函数中的arguments参数

    function add(a,b){
      console.log(a+b);
      console.log(arguments.length)
    }
    
    add(1,2)   //  3  2 
    
    注意:函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回

    三、函数的全局变量和局部变量

    #局部变量:
    
    在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,局部变量就会被删除。
    
    #全局变量:
    在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
    
    #变量生存周期:
    JavaScript变量的生命期从它们被声明的时间开始。
    局部变量会在函数运行以后被删除。
    全局变量会在页面关闭后被删除。

    四、作用域

    首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。另外函数的作用域关系是在定义阶段就固定死的,与调用位置无关

    //举例,用法 跟python查找变量的顺序一致
    var city = "BeiJing";
    function f() {
      var city = "ShangHai";
      function inner(){
        var city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    
    f();  //ShenZhen
    
    
    var city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
      var city = "ShangHai";
      return Bar;
    }
    var ret = f();
    ret();  // BeiJing
    
    
    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();  //ShangHai

    五、javascript中的变量提升和函数提升

    1、在js中只有两种作用域

      全局作用域、函数作用域

      ps:在ES6之前,js是没有块级作用域。

    2、什么是没有块级作用域?

     3、什么是变量提升?

    在js中,代码执行时分两步走:1、解析 2、一步一步执行

    那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去。

     

     举例分辨:

    4、什么是函数提升?

    举例1:

    fn();  //此处可以正常调用
    console.log(fn);
    function fn(){
        console.log("哈哈哈哈")
    }
    fn(); //此处也可以正常调用
    
    //输出结果:
    
    哈哈哈哈
    {
        console.log("哈哈哈哈")
    }
    哈哈哈哈
    
    
    //注意:函数声明式,会将函数的声明和定义一起提升到作用域的最顶上去。

    举例2:

    函数表达式声明的函数

    console.log(fn); //undefined
    var fn=function (){
        console.log("举例2")
    };
    console.log(fn);
    
    //输出结果:
    ƒ (){
        console.log("举例2")
    }

    举例3:

    如果函数声明和变量声明使用的是同一个变量名称,函数声明的优先级高于变量声明的优先级

    console.log(fn);
    function fn(){"举例3"};
    var fn="hello";
    console.log(fn);
    
    //输出结果:
    ƒ fn(){"举例3"}
    hello

    总结:

    #1:所有的声明都会提升到作用域的最顶上去。
    
    #2:同一个变量只会声明一次,其他的会被忽略掉。
    
    #3:函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。
  • 相关阅读:
    POCO库——Foundation组件之日期时间DateTime
    POCO库——Foundation组件之加解密Crypt
    POCO库——Foundation组件之缓存Cache
    POCO库——Foundation组件之核心Core
    POCO库——Foundation组件概述
    HP-SOCKET TCP/UDP通信框架库解析
    Notepad++ 使用nppexec插件配置简易开发环境
    Duilib源码分析(五)UI布局—Layout与各子控件
    Breakpad Google的crash捕获、抓取开源库
    Pugixml一种快速解析XML文件的开源解析库
  • 原文地址:https://www.cnblogs.com/guojieying/p/13705837.html
Copyright © 2011-2022 走看看