• 变量提升、函数提升


      如果熟悉js代码执行的过程,这个问题不难理解

    一、变量提升

      ES5中没有块作用域,有全局作用域、局部作用域(函数)等

    // 不声明定义变量
    console.log(name)  //报错,变量没有定义
    
    // 变量提升
    console.log(info) // undefined,不报错
    var info = "hello";
    
    function fun(){
        console.log(a) // undefined,不报错
        var a = 'world'
        console.log(a) // world 
    }
    fun();

    之所以出现这种情况,是因为变量提升导致的;上述过程相当于:

    var info; // 先声明变量,没有赋值
    
    function fun(){
        var a; // 声明变量,没有赋值
        console.log(a) // undefined,不报错
        a = 'world'
        console.log(a) // world 
    }
    
    // 不声明定义变量
    console.log(name)  //报错,变量没有定义声明
    
    // 变量提升
    console.log(info) // undefined,不报错
    info = "hello";
    
    fun();

    二、函数提升

      创建函数有三种方式:

        1.函数声明

        2.函数表达式

        3.使用Function对象创建(不推荐使用)

      只有在“函数声明”方式中,函数才会提升。

      函数提升:执行函数代码时,先执行函数声明;

    // 只有函数声明形式才会函数提升
    sayHello(); // 不会报错,正常执行
    
    function sayHello(){
         console.log("hello !")  
    }
    
    fun(); // 报错(undefined is not a function) ,此时fun是个变量,虽然会变量提升,但在此行值为undefined;undefined不是函数,因此这句报错
    var fun = function(){}

      相当于如下:

    function sayHello(){
         console.log("hello !")  
    }
    
    var fun;
    
    sayHello(); // 不会报错,正常执行
    
    fun(); // 此时fun值为undefined,报typeError
    
    fun = function(){}
  • 相关阅读:
    HDU 1847 Good Luck in CET-4 Everybody! (博弈)
    HDU 1242 Rescue (BFS+优先队列)
    POJ 1061 青蛙的约会(扩展欧几里德算法)
    UVa 1610 Party Games(思维)
    hdu 1025LIS思路同1257 二分求LIS
    hdu 1257 LIS (略坑5
    什么是可串行化MVCC
    老板又出难题,气得我写了个自动化软件
    opencv学习一:概述与环境搭建(python3.7+pycharm)
    人工智能能力提升指导总结
  • 原文地址:https://www.cnblogs.com/RocketV2/p/6531819.html
Copyright © 2020-2023  润新知