资讯专栏INFORMATION COLUMN

个人总结:关于变量提升和函数提升的理解

antz / 1870人阅读

摘要:变量提升变量的声明写在可以在使用变量之后函数提升函数可以先调用,后声明上面先解释了下我理解的这两个概念的定义。参考前端基础进阶三变量对象详解关于变量提升的理解

变量提升:变量的声明写在可以在使用变量之后;
函数提升:函数可以先调用,后声明;

上面先解释了下我理解的这两个概念的定义。要真正理解它们,最好从变量对象的角度出发。引出变量对象的概念,要先理解执行上下文,也就是当控制器执行到可执行代码的时候,就会生成一个执行上下文,也就是代码的执行环境,会产生一个作用域。这个执行上下文的生命周期有两个阶段:创建阶段代码执行阶段

创建阶段就会创建变量对象,创建的过程分三步:

1.建立arguments对象。检查当前上下文中的参数,建立该对象下的属性与属性值
2.先检查有没有函数声明(利用function关键字声明的函数,在变量对象中用函数名作为属性名,属性值是函数内存地址
的引用。如果函数名的引用已经存在,那么会被新的引用覆盖)
3.再检查变量声明,每找到一个变量声明,就在变量对象里用变量名作为属性名,属性值是undefined。如果变量名已经存在,直接跳过,目的是防止把同名的函数被修改成undefined

执行阶段会将变量对象转换为活动对象:

创建完成之后,就会开始执行代码,这个时候,会完成变量赋值,函数引用,以及执行其他代码。
(在变量对象创建过程中,其中的属性不可访问。只有在执行阶段转为活动对象后,才可以访问其中的内容)

先来一个简单的例子:

function foo(){
    a = 2;
    function a(){
        console.log("函数")
    }
    console.log(a); //2
    var a;
};
foo();

这个例子中,当控制器遇到这段代码时候,会形成一个执行上下文。随后进入到执行上下文的第一个生命周期:创建阶段,此时,执行创建变量对象的三个步骤。

由于没有参数。直接进入第二步。

首先检查上下文中有没有function关键字声明的函数,以a为属性名,函数的引用为属性值,添加到变量对象中。

再检查函数声明,发现了变量名a,但是,以a为属性名的属性值已经存在,所以跳过。

接下来进入第二个生命周期:代码执行

a被赋值为2,函数a未被调用。打印a等于2

函数提升也是一个道理,由于变量对象创建过程中会先检查function关键字声明的函数,以该函数的函数名为属性,值为函数地址的引用,添加进变量对象中。

参考:前端基础进阶(三):变量对象详解 关于JavaScript变量提升的理解

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107039.html

相关文章

  • JavaScript函数

    摘要:函数面试考点比较密集参考阮一峰函数我的博客关于作用域变量提升函数提升的个人理解笔记函数的五种声明方式具名函数声明一个变量七种数据类型声明一个函数是个特例不写自动加上关于返回会在传入的参数里首先调用方法但是当打印到控制台的时候没有写双引号是浏 JavaScript函数 面试考点比较密集参考阮一峰JavaScript函数我的博客:关于作用域,变量提升,函数提升的个人理解笔记 1.函数的五种...

    v1 评论0 收藏0
  • 一次阿里面试后对函数本质理解

    摘要:函数使用函数的使用主要有两种闭包闭包的本质是对共享变量的操作,典型运用是观察者模式备忘录模式普通封装,复用。参考阿里博客你可能不知道的事基础篇总结要写好一个项目需要兼容,性能,安全等。 一次阿里面试后对函数本质的理解 写在前面 环境:阿里的在线编程系统允许面试官在线考察面试者的编程能力. 考点:编程和理论. 编程:分为技术自驱力、异步操作、编程风格(颗粒小)、变量作用域、DOM操作...

    liuyix 评论0 收藏0
  • 一次阿里面试后对函数本质理解

    摘要:函数使用函数的使用主要有两种闭包闭包的本质是对共享变量的操作,典型运用是观察者模式备忘录模式普通封装,复用。参考阿里博客你可能不知道的事基础篇总结要写好一个项目需要兼容,性能,安全等。 一次阿里面试后对函数本质的理解 写在前面 环境:阿里的在线编程系统允许面试官在线考察面试者的编程能力. 考点:编程和理论. 编程:分为技术自驱力、异步操作、编程风格(颗粒小)、变量作用域、DOM操作...

    superw 评论0 收藏0
  • 一次阿里面试后对函数本质理解

    摘要:函数使用函数的使用主要有两种闭包闭包的本质是对共享变量的操作,典型运用是观察者模式备忘录模式普通封装,复用。参考阿里博客你可能不知道的事基础篇总结要写好一个项目需要兼容,性能,安全等。 一次阿里面试后对函数本质的理解 写在前面 环境:阿里的在线编程系统允许面试官在线考察面试者的编程能力. 考点:编程和理论. 编程:分为技术自驱力、异步操作、编程风格(颗粒小)、变量作用域、DOM操作...

    jeyhan 评论0 收藏0
  • JS编译之 LHS RHS(你不知道JavaScript 小记一)

    摘要:关于两个专业术语的讨论起自对你不知道的一书的阅读学习。遇到,编译器会询问作用域是否已经有一个该名称的变量存在于同一个作用域的集合中。摘录来自你不知道的。 JS 编译之 LHS RHS 一、前言 最近和朋友聊技术的时候,聊到 LHS RHS,我竟然没听说过 没听说过。。。 于是成功引起了我的好奇心。 关于两个专业术语的讨论起自对《你不知道的JavaScript》一书的阅读学习。 二、编译...

    Cristic 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<