首页 > 其他分享 >变量提升与函数提升

变量提升与函数提升

时间:2022-09-20 16:13:33浏览次数:94  
标签:function console log fun 提升 var 变量 函数

一、变量提升

  变量提升即将变量声明提升到它所在作用域的最开始的部分。

  • 通过var定义(声明)的变量,在定义语句之前就可以访问到;
  • 值:undefined;
  •     console.log(a); //undefined
        var a = 1;

    因为有变量提升的缘故,上面代码实际的执行顺序为:

  •     var a;
        console.log(a);
        a = 1;

    二、函数提升

      js中创建函数有两种方式:函数声明式和函数表达式
      1、函数声明提升

        function fun() {
            console.log('函数声明式');
        }

    js在执行之前,会把foo函数提升到最前面,所以我们在fun函数定义之前就可以使用fun函数。
      举个栗子来说明下:

        fun();
        function fun(){
            console.log("aa");
        }

    打印结果为aa;说明以函数声明来定义函数时,可以在定义函数之前访问到定义的函数。

  • 2、函数表达式提升
  • 	var fun = function() {
    	    console.log('函数表达式');
    	};
    

      

    此种声明方式我们可以理解为一个普通变量的提升,在js代码执行之前会把fun提升带最前面,在函数赋值之前,fun是undefined,如果调用fun(),将会报错。

      再举个栗子来理解下:

  •     fun();
        var fun = function (){
            console.log("aa");
        }

    此时打印的结果为报错Uncaught TypeError: fun is not a function,因为在js代码执行之前,会把fun提升到最前面,值为undefined,不是一个函数,以函数的形式来进行调用时将会报错。

    三、面试题
      把上面这些基本知识理清楚后,在看几道面试题,检测是否真的学明白了。

      1、第一题
     

      var a = 4
      function fn () {
        console.log(a)
        var a = 5
      }
      fn()

    输出结果:undefined
      说明: 在上面这段代码中有两个作用域,window全局作用域和fn函数作用域,在打印变量a时,会先在fn函数作用域里面查找,因为在执行fn函数时,在函数内部也会先进行变量提升,所以最终的打印结果为undefined
    代码实际的执行顺序为:

  •   var a = 4
      function fn () {
        var a;
        console.log(a); //undefined
        a = 5
      }
      fn()

    2、第二题

  •   function a() {}
      var a;
      console.log(typeof a)

    输出结果:function

  •   function a() {}
      var a = 1;
      console.log(typeof a)

    输出结果:number
      说明:函数提升优先级高于变量提升,且不会被同名变量声明时覆盖,但是会被同名变量赋值后覆盖。

  • 3、第三题
  •   console.log(typeof a)
      function a() {}
      var a = 1;

     输出结果:function
      说明: 函数提升的优先级高于变量提升。

      4、第四题
      大家可以看下这个例子最后的输出结果,检测下自己理解的如何。至于打印输出的结果我就不透露了,大家可以在控制台打印输出下,看看是否和自己预想的一样。

  •   console.log(v1);
      var v1 = 100;
      function foo() {
        console.log(v1);
        var v1 = 200;
        console.log(v1);
      }
      foo();
      console.log(v1);

     

标签:function,console,log,fun,提升,var,变量,函数
From: https://www.cnblogs.com/sexintercourse/p/16711387.html

相关文章

  • 第二章 变量
    一、变量介绍1什么是变量?量指的是记录事物的状态变指的是事物的状态是可以发生变化的#变量本质就是一种数据存储的机制,变量的数据都是存放于内存中的2为何要有变量?......
  • JavaScript 声明提升
    函数及变量的声明都将被提升到函数的最顶部。变量可以在使用后声明,也就是变量可以先使用再声明。声明提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最......
  • 前端面试总结02-变量类型和计算
    值类型与引用类型值类型:   引用类型常见值类型:consta//undefinedconsts='abc'constn=100constb=trueconsts=Symbol('s')常见引用类型:constobj={x:......
  • Python-getopt函数使用
    getopt函数,主要目的就是对命令行参数进行解析。让你的脚本灵活性更强,可以针对性选择性的进行数据的处理和总结。>>opts,args=getopt.getopt(sys.argv[1:],'c:d:',['......
  • 如何使用 JavaScript 在 Camunda 外部任务中使用瞬态变量
    你怎么做使用JavaScript的Camunda外部任务中的瞬态变量在本文中,让我们看看如何在使用java脚本实现Camunda外部任务的同时使用瞬态变量。先决条件:1.卡蒙达7.1......
  • 第十一章 Ansible-playbook变量注册和Facts缓存
    一、变量注册概述当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些return返回值,我们才知道,上一步是否可以执行成功,但......
  • 第十章 Ansible-playbook变量基础
    一、ansible变量概述ansible变量提供了便捷的方式来管理Ansibleplaybook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲此......
  • pg 随机函数 和uuid 生成
      UUID生成--创建createextension"uuid-ossp";--使用selectuuid_generate_v4()--创建随机函数CREATEORREPLACEFUNCTIONget_random_number(integer,int......
  • Neo4j之Cypher语法(3) ——函数
    1.谓词函数谓词函数返回true或者false,主要用于检查是否存在或满足特定的条件。1.1Exists如果指定的模式存在于图中,或者特定的属性存在于节点、关系或Map中,那么函数返......
  • 环境变量
    环境变量,简单来说就是描述程序执行环境的一组变量。1、什么程序执行环境?环境已经基础词汇呢,我们通常都用环境去解释别的词,想一下,日常生活怎么用环境。你到一个新地方,我问......