返回顶部
首页 > 资讯 > 前端开发 > node.js >javascript变量提升案例分析
  • 395
分享到

javascript变量提升案例分析

2024-04-02 19:04:59 395人浏览 独家记忆
摘要

本篇内容主要讲解“javascript变量提升案例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript变量提升案例分析”吧!

本篇内容主要讲解“javascript变量提升案例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript变量提升案例分析”吧!

在javascript中,变量提升是指在变量的作用域内,不管变量在何处声明,都会被提升到作用域的顶部,但是变量初始化的顺序不变。变量提升实际的实现方式是JavaScript的变量和函数的声明会在编译阶段放入内存。

教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

什么是变量提升?

变量提升(Hoisting)是人们对JavaScript执行上下文工作方式的一种认识,并不是官方给出的改变。

从字面上理解,变量提升的意思是变量和函数的声明会在物理层移动到作用域的最前面,虽然这样理解并不准确,效果是相同的。

通俗的来说,变量提升就是,在变量的作用域内,不管变量在何处声明,都会被提升到作用域的顶部,但是变量初始化的顺序不变。

变量提升实际的实现方式是JavaScript的变量和函数的声明会在编译阶段放入内存。这意味着使用者在正式声明一个函数或者变量之前就能够使用它。

要搞清楚变量提升的实现,首先我们要明确以下2点:

  • javascript代码并不是一行一行往下执行的.

  • javascript执行分为2个步骤:

    • 编译(词法解释/预解释)

    • 执行

变量提升帮助理解

console.log(a);
var a = 'ghostwu';

对于上面的代码这个例子,第一行代码,你可能认为报错, 因为在输出a之前,没有定义a变量, 但是正确的结果是undefined.。根据上面js执行代码的解释,结合实际的代码,当我们碰到 var a = "ghostwu" 定义一个变量的时候, 其实js把这句话看成是2个阶段的事,  var a 发生在编译阶段, a = 'ghostwu'发生在执行阶段. 然后 var a会被提升到当前作用域的最前面,  a = 'ghostwu'留在原地等待执行阶段,所以看下面的案例:

 a = 'ghostwu';
 var a;
 console.log( a );
 
 //上面这段代码经过编译之后,变成下面这样

 var a;  //被提升到当前作用域的最前面
 a = 'ghostwu'; //留在原地,等待执行
 console.log( a ); //输出ghostwu
 
 
 
  console.log( a ); 
   var a = 'ghostwu';

   //上面这段代码,经过编译之后,变成下面这样
   
   var a;
  console.log( a );//输出undefined,而不会报错
   a = 'ghostwu';

函数声明提升

在讲解函数声明提升之前,我们先来了解函数的常见的两种定义方式

         //函数声明, 形如:
         function show(){
             console.log( '函数声明方式' );
         }
 
         //函数表达式, 形如:
         var show = function(){
             console.log( '表达式方式' );
         }

因为函数表达式和函数的声明,在编译阶段,会产生不同的解释效果,所以函数的声明会被提升,案例见下面代码:

         show();
         function show(){
             console.log( a );
             var a = 'ghostwu';
         }


//函数声明会被提升,所以上面的代码经过编译之后,就变成下面这样

    function show(){    //函数声明被提升到 当前作用域的最前面
    var a;    
     //var声明被提升到当前作用域的最前面, 注意,他不会提升到函数的外面, 因为当前的作用域是在函数中
    console.log( a );
    a = 'ghostwu';
   }
   show();//输出undefined

但是函数表达式是不会被提升的,看下面的例子:

show(); //报错,show is not a function
var show = function(){
 console.log( 'ghostwu' );
}
//对于上面这段表达式代码,经过编译之后:
var show;
show();  //执行之后就是 undefined(), 所以在表达式定义之前,调用函数报错了
show = function(){
  console.log( 'ghostwu' );  
}

但是看下面的案例:

show(); //你好
var show;
function show(){
console.log( '你好' );
}
show = function(){
   console.log( 'hello' );
}

上面的代码为什么会输出“你好”,因为当出现同名的函数声明,变量声明的时候, 函数声明会被优先提升,变量声明会被忽略。 所以经过编译之后,就变成:

function show(){
   console.log( '你好' );
}
show(); //你好
show = function(){
  console.log( 'hello' );
}
show();//如果这里在调用一次,就是hello, 因为show函数体在执行阶段被重新赋值了

但是如果有同名的函数声明,后面的会覆盖前面的,如下代码:

show(); //how are you
var show;
function show(){
console.log( 'hello' );
}    
show = function(){
console.log( '你好' );
}
function show(){
console.log( 'how are you!' );
}  

//上面的代码经过编译之后,变成如下形式:
function show(){
   console.log( 'how are you!' );
}
show(); //how are you
show = function(){
 console.log( '你好' );
}
show(); //如果在这里再执行一次,结果:你好

注:

  • 变量提升只是提升变量的声明,并不会把赋值也提升上来。

  • 正因为有变量提升这回事,所以为了避免变量提升带来的不好的影响,我们最好在定义变量时,使用let而不是var。

到此,相信大家对“javascript变量提升案例分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: javascript变量提升案例分析

本文链接: https://lsjlt.com/news/88785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • javascript变量提升案例分析
    本篇内容主要讲解“javascript变量提升案例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript变量提升案例分析”吧! ...
    99+
    2024-04-02
  • JavaScript的变量提升实例分析
    本篇内容介绍了“JavaScript的变量提升实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2024-04-02
  • javascript中变量提升的示例分析
    这篇文章主要介绍了javascript中变量提升的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:a = ...
    99+
    2024-04-02
  • JavaScript中的变量提升实例分析
    这篇文章主要介绍“JavaScript中的变量提升实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中的变量提升实例分析”文章能帮助大家解决问题。前言:JavaScript中...
    99+
    2023-06-30
  • javascript中变量提升和闭包的示例分析
    这篇文章主要介绍了javascript中变量提升和闭包的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们先来看一个题目:<s...
    99+
    2024-04-02
  • JavaScript中变量提升与预编译的示例分析
    这篇文章主要为大家展示了JavaScript中变量提升与预编译的示例分析,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“JavaScript中变量提升与预编译的示例分析”这篇文章吧。Java的特点有...
    99+
    2023-06-06
  • 浅析JavaScript中的变量提升
    目录前言:函数提升var变量提升let & const提升Class提升前言: JavaScript中奇怪的一点是你可以在变量和函数声明之前使用它们。就好像是变量声明和函数声...
    99+
    2024-04-02
  • 基于js变量提升和函数提升的示例分析
    小编给大家分享一下基于js变量提升和函数提升的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、变量提升在ES6之前,J...
    99+
    2024-04-02
  • JavaScript变量实例分析
    本篇内容主要讲解“JavaScript变量实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript变量实例分析”吧!   &nbs...
    99+
    2024-04-02
  • JavaScript中变量提升和函数提升实例详解
    js 执行 词法分析阶段:包括分析形参、分析变量声明、分析函数声明三个部分。通过词法分析将我们写的 js 代码转成可以执行的代码。 执行阶段 变量提升 ...
    99+
    2024-04-02
  • JavaScript声明提升实例分析
    本篇内容主要讲解“JavaScript声明提升实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript声明提升实例分析”吧!   ...
    99+
    2024-04-02
  • JavaScript变量的示例分析
    这篇文章主要为大家展示了“JavaScript变量的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript变量的示例分析”这篇文章吧。基本类...
    99+
    2024-04-02
  • JavaScript变量和变换实例分析
    本篇内容主要讲解“JavaScript变量和变换实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript变量和变换实例分析”吧!1.声明使用变量之前务必通过关键字var进行声明...
    99+
    2023-06-30
  • JavaScript中的变量提升和函数提升
    目录前言为什么有变量提升javascript变量提升和函数提升总结前言 在js中对变量进行操作后打印值经常会出现undefined的现象。其实原因是因为js中有一个叫做变量提升的功 ...
    99+
    2024-04-02
  • JavaScript局部变量实例分析
    本篇内容介绍了“ JavaScript局部变量实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! &...
    99+
    2024-04-02
  • JavaScript变量使用实例分析
    这篇文章主要讲解了“JavaScript变量使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript变量使用实例分析”吧! &nbs...
    99+
    2024-04-02
  • 简单谈谈JavaScript变量提升
    目录前言1. 什么变量提升? 2. 为什么会有变量提升? (1)提高性能(2)容错性更好3. 变量提升导致的问题 (1)变量被覆盖(2)变量没有被销毁4. 禁用变量提升 5. JS如...
    99+
    2024-04-02
  • JavaScript变量声明如何提升
    这篇文章主要讲解了“JavaScript变量声明如何提升”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript变量声明如何提升”吧!变量一个变量...
    99+
    2024-04-02
  • JavaScript提升机制Hoisting的示例分析
    这篇文章主要为大家展示了“JavaScript提升机制Hoisting的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript提升机制Hoi...
    99+
    2024-04-02
  • JavaScript中的变量提升和函数提升方法
    本篇内容介绍了“JavaScript中的变量提升和函数提升方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在js中对变量进行操作后打印...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作