变量提升练习题

今天有学习前端的小伙伴分享了几个有关变量提升的题目,觉得很有代表性,正好记录下来。

例::

console.log(a)	
var a = 12	

function test() {
    console.log(a)
    a = 13
}
test()
console.log(a)

打印结果:

请添加图片描述

分析:

首先,全局变量a会提升,对于1,2行相当执行了如下代码

var a
console.log(a) //这里的a相当于只声明但未赋值    undefined
a=12

代码执行流进入test函数,函数体内并没有声明a变量,在函数上下文中是找不到a变量的(所有定义的变量都会在上下文关联的变量对象上),所以通过作用域链向全局变量对象上查找变量a,此时变量a的值是12.所以第五行打印的结果是12

在函数内部打印了全局变量a后 ,又对全局变量a进行了修改,值为13。所以在函数执行完毕后,全局变量a的值为13,所以最后一行打印结果 为13。

变:

console.log(a)	
var a = 12	

function test() {
    console.log(a)
    var a = 13
}
test()
console.log(a)

这里是对第一个例子做了一个变形,仅仅把函数体内部 a=13 前面加了个var关键字,下面看打印结果:

请添加图片描述

这也很好理解,区别就在于函数体内部的a变量不再是全局变量:代码执行流进入函数后,会搜索自身上下文中的变量(所有定义的变量都会在上下文关联的变量对象上),此时a变量并未赋值,是undefined,所以打印结果为undefined。注意,这里的a变量为函数的局部变量,我们并没有像之前那样去顺着作用域链去全局上下文中找数据。

最后一行打印的结果为12,因为全局变量a在第一次赋值为12后 并没有被改变。

看到这里可以给弟弟来个三联吗?

请添加图片描述

练一练:

var a = 1

function fn() {
    if (!a) {
        var a = 10
    }
    console.log(a)
}
fn()

打印结果:

请添加图片描述

分析:

代码执行流进入函数,会在函数上下文中找a变量,此时a变量是没有赋值的,值是undefined。所以呀,if判断条件返回结果为true,代码继续执行。a被赋值10,打印a变量自然结果为10。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,变量声明是非常重要的一部分。根据引用,变量声明需要遵守一些规则,比如变量名必须以英文字母、下划线(_)或美元符号($)开头,而后面可以包含字母、下划线(_)、美元符号($)和数字。变量名不能使用系统的关键字或保留字作为变量名。在JavaScript中,变量有不同的数据类型,包括Number、String、Boolean、undefined和null。如果声明了一个变量但未赋值,则它的值为undefined。 根据引用,练习题是一个很好的学习JavaScript变量的方式。通过练习,可以巩固对变量声明和赋值的理解,并提升编程能力。练习题可以包括不同的难度级别,从简单的变量声明到复杂的类型转换和条件语句。这样的练习题可以帮助新手更好地掌握JavaScript变量的概念和用法。 所以,JavaScript变量练习题可以包括以下内容: - 变量声明和赋值 - 数据类型转换 - 条件语句和循环语句的应用 通过这些练习题,可以提高对JavaScript变量的理解和熟练度。希望这些练习对你的学习有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [(一)Javascript从变量至类型转化(含练习)](https://blog.csdn.net/weixin_51458883/article/details/114852562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [JavaScript变量声明详解](https://download.csdn.net/download/weixin_38713450/13040420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值