Javascript——声明提升(函数、变量提升)

 2023-09-11 阅读 17 评论 0

摘要:文章目录一、 声明提升1.1 示例讲解(变量提升)1.2 示例讲解(函数提升)二、解决方案2.1 使用赋值详解三、exercise 一、 声明提升 声明提升是JavaScript中的一个缺陷,会造成输出结果与所构想的结果不一致。 1. js引擎会将简写形式分解为原

文章目录

  • 一、 声明提升
    • 1.1 示例讲解(变量提升)
    • 1.2 示例讲解(函数提升)
  • 二、解决方案
    • 2.1 使用赋值
      • 详解
  • 三、exercise

一、 声明提升

声明提升是JavaScript中的一个缺陷,会造成输出结果与所构想的结果不一致。

1. js引擎会将简写形式分解为原形式
2. 将找到的声明依次提前到当前作用域的顶部,集中创建,
3. 赋值将会留在原地

例如:
var a = 10;
=>
var a; a= 10;


在程序开始执行前,找两种东西:
var 变量名;function 函数名(){}

1.1 示例讲解(变量提升)

javascript如何声明变量。示例代码:

//var a   		//会将第三行的var a提到最前面,提前声明变量
console.log(a);	//undefined
var a = 1;		//有var才提升
console.log(a);	//1

①第一步将var a = 1;的简写形式分解为声明语句和赋值语句
在这里插入图片描述

②将声明提升到当前作用域的顶部:
在这里插入图片描述
③所以当执行到第一句console.log(a)时,a还未赋值,故为undefined
在这里插入图片描述
③当执行到第二句console.log(a)时,a已被赋值1,故为1
在这里插入图片描述


1.2 示例讲解(函数提升)

示例代码:

function fun(){console.log(1);}
fun();
function fun(){console.log(2);}
fun();

①首先找到两个function fun(){},将其提到当前作用域的顶部:
在这里插入图片描述
②顶部的两个fun()函数同名,后添加的覆盖前一个,故fun()输出的都是2
在这里插入图片描述

二、解决方案

针对1.2的示例代码,我们原意是要输出1,2,由于js的声明提升缺陷,输出结果为2,2。
如何解决这个问题呢?

2.1 使用赋值

c语言怎么声明函数、“js引擎会将简写形式分解为原形式” “赋值将会留在原地”

代码如下:

var fun = function fun(){console.log(1);}
fun();
var fun = function fun(){console.log(2);}
fun();

详解

var fun = function fun(){console.log(1);}为简写形式,可分解:
在这里插入图片描述
②将var fun;提到当前作用域的顶部
在这里插入图片描述
③同理,第二个var fun语句重复上述操作
在这里插入图片描述
④顶部语句覆盖:
在这里插入图片描述
⑤js引擎进行赋值,首先赋值fun = function(){console.log(1)},故第一个fun()结果返回1
在这里插入图片描述
⑥往下走,赋值fun = function(){console.log(2)},故第二个fun()值为2
在这里插入图片描述

三、exercise

例1:

function fn() {//var b 提升到整个函数作用域的最前边console.log(b);//undefinedvar b = 2;console.log(b);//2
}
fn();

例2:

var c = 3;
function fun() {//var c;console.log(c); //undefinedvar c = 5;      //给当前作用域下的c赋值给5
}
fun();
console.log(c); //3

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/48828.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息