最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 关于变量提升和函数提升的那些事

    正文概述 掘金(柒天后)   2021-05-18   447

    前言

    在学习javascript过程中,我们应该如何让初学者理解关于变量提升和函数提升,接下来让我们来了解一下关于变量提升和函数提升的那些事。

    变量提升

    首先,大家都知道代码是从上往下执行的,接下来,我们需要简单了解一下JS的代码在运行过程,需要经历那些阶段,代码的运行过程中,分为编译阶段和执行阶段,变量提升就发生在编译阶段,接着我们来看下面的例子

    console.log(a)//undefined
    var a = 'tdl'
    
    a = 'tdl'
    var a
    console.log(a)//tdl
    
    

    第一段代码的执行结果是undefined,第二段是tdl,为什么会出现这种情况,很多初学者可能会认为两段代码的输出结果都是tdl,这就涉及到变量提升的问题了,变量提升会吧所有的变量声明提到最开头的阶段,并给变量赋值为undefined,然后按照代码以后一行执行,我们把这两段代码在预编译阶段的处理过程模拟一下,会变成下面这样的代码

    var a = undefined
    console.log(a)//undefined
    a = 'tdl'
    
    var a = undefined
    a = 'tdl'
    console.log(a)//tdl
    

    我们就可以这样理解关于变量提升,就是把变量声明提到最前面,然后赋值为undefined,然后将代码从上往下执行。然后到a赋值阶段,就会把tdl赋给变量a,从而取代undefined。就会按照这样将代码按先后顺序执行

    函数提升

    了解函数提升之前我们应该简单了解一下函数声明和函数表达式,而区分函数声明和表达式最简单的方法就是看function关键字出现在声明中的位置(不单单值一行代码,而是整个声明的位置),如果function出现在声明的第一个词,那么就是函数声明,否则即使表达式。我们看下面的两段代码

    Name()//tdl
    function Name(){
        console.log('tdl');
    }
    
    Name()
    console.log(Name);//ReferenceError: Name is not defined
    var a = function Name(){
        console.log('tdl');
    }
    

    从中我们可以看出,第一段代码hi输出tdl,第二段会报错,我们简要来看一下他的预编译过程

    function Name(){
        console.log('tdl');//函数声明部分被提升
        Name()// 执行之后会输出结果tdl
    } 
    
    var a = undefined
    Name()
    console.log(Name);//ReferenceError: Name is not defined
    function Name(){
        console.log('tdl');
    }
    

    第一段代码中可以找到name,所以就正常输出name的值,而第二段代码,按照从上往下的执行顺序,Name没有找到,所以就会报错。 )

    总结

    1. 变量声明和函数声明都会被提升到最开头
    2. 代码分为编译阶段和执行阶段,代码是按顺序从上往下执行的。
    3. 学习JS最基础的一点是要学会看懂代码,关于变量提升和函数提升很重要的基础。

    参考资料来源小黄书


    下载网 » 关于变量提升和函数提升的那些事

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元