资讯专栏INFORMATION COLUMN

JavaScript的变量声明和变量提升

luffyZh / 777人阅读

摘要:浏览器在执行代码时,会在运行前对带有和关键字的代码进行提前,这一过程被称为变量提升。预解析值会发生在通过定义的变量和上。

最近在巩固前端基础,看到预解析和代码执行部分,里面讲到提到了声明提升,因为与我们的日常很密切,根据个人所得,写一篇文章。

1. 先解释一下什么叫预解析?

顾名思义,提前解析。浏览器在执行代码时,会在js运行前对带有var和function关键字的代码进行提前,这一过程被称为变量提升。预解析值会发生在通过var定义的变量和function上。

2. var关键字

通过var关键字定义的变量在进行预解析过程的时候,都是先声明,然后赋值undefined。不管是否已经赋值,

    // 1.
    alert(a);   // undefined
    var a = 1;
    
    // 2.
    alert(b);   //
    var b = function(){}
    
    // 3.
    alert(c);
    var c;

只要是var定义的,不管是变量还是函数,都是先赋值undefined。如果是变量,也不管是否赋值,在预解析阶段都会被赋值为undefined。

3. 关键字function

在进行预解析的时候,function此时已经被声明并且被定义了,但是他存储数据的那个空间里面存储的是代码字符串,没有任何意义。

    alert(a);  // 弹出的是下面的function
    function a(){}
    
    // 注意:函数在预解析的时候会将代码分成两部分来执行,第一部分是fn函数;第二部分是(),一个匿名函数,这时在执行过程中会报错。如果小括号带参数,如(2),虽然不会报错,也打印出2,但是并不能把fn执行,不能当做参数传递给fn函数。

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

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

相关文章

  • JavaScript 变量声明提升

    摘要:输出的结果为输出的结果为提升后输出的结果为重新定义了变量输出的结果为如果定义了相同的函数变量声明,后定义的声明会覆盖掉先前的声明,看如下代码输出练习的值是多少的值是多少第二题的解析请看这里参考资料文章文章中文版链接文章推荐文章变量提升 JavaScript 变量声明提升 原文链接 一个小例子 先来看个例子: console.log(a); // undefined var a =...

    fireflow 评论0 收藏0
  • javascript声明提升

    摘要:但是碰到声明提升,这种想法就会被打破。声明一个函数进行相应的操作,会得到函数声明提升的结果。由此可以发现变量和函数的声明都会被提升在其他代码的前面执行。一个普通块内部的函数声明通常会被提升到所在的作用域的顶部。的创建初始化和赋值均会被提升。 Javascript声明提升 在分析声明提升之前,我认为有必要知道的两点: 一、引擎查询变量的两种方式 引擎查询变量的方式可以分为LHS和RHS两...

    evin2016 评论0 收藏0
  • ES6 变量作用域与提升变量生命周期详解

    摘要:不同的是函数体并不会再被提升至函数作用域头部,而仅会被提升到块级作用域头部避免全局变量在计算机编程中,全局变量指的是在所有作用域中都能访问的变量。 ES6 变量作用域与提升:变量的生命周期详解从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章。本文详细讨论了 JavaScript 中作用域、执行上下文、不同作用域下变量提升与函数提升的表现、顶层对象以及如何避免创建...

    lmxdawn 评论0 收藏0
  • 【6】JavaScript 函数高级——执行上下文与执行上下文栈、变量提升(图解+典型实例分析)

    摘要:函数和变量相比,会被优先提升。这意味着函数会被提升到更靠前的位置。仅提升声明,而不提升初始化。 JavaScript 函数高级——执行上下文与执行上下文栈(图解+典型实例分析) 变量提升与函数提升 变量声明提升 通过 var 定义(声明)的变量,在定义语句之前就可以访问到 值:undefined /* 面试题 : 输出 undefined */ var a = 3 ...

    niuxiaowei111 评论0 收藏0
  • JavaScript变量提升

    摘要:变量提升需要注意两点提升的部分只是变量声明,赋值语句和可执行的代码逻辑还保持在原地不动提升只是将变量声明提升到变量所在的变量范围的顶端,并不是提升到全局范围,说明如下会输出变量提升之后的效果函数声明会提升,但是函数表达式就不了。 问题 有些朋友可能会觉得javascript的代码是从上到下,一行一行的解释执行的。如果按照这样的思路,在有些情况下阅读代码会得到错误的结果,考虑以下代码: ...

    Zoom 评论0 收藏0
  • JavaScript 变量提升

    摘要:生命周期假设这样一个场景当解释器刚进入一个包含的作用域时,则在任何语句执行之前,变量就已完成了声明阶段和初始化阶段,且值为。当解释器执行完,变量就已完成了初始化阶段,离开了临时死区,并具有的值。 变量提升是一个将变量声明或者函数声明提升到作用域起始处的过程。在本篇博文中,我们一起深入了解这个过程的更多细节。 变量的生命周期 当引擎使用变量时,它们的生命周期包含以下阶段: 声明阶段,...

    li21 评论0 收藏0

发表评论

0条评论

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