var 声明变量的特点:没有块级作用域、存在变量提升 。没有块级作用域,使 var 声明的变量在 if 语句外可以被访问 存在变量提升,使 var 声明的变量提升到当前作用域的顶部

请问函数test最终输出的值是多少?

var a = 1; function test() { console.log(a); if(false) { var a = 2; } } test();

A
1

B
2

C
undefined

D
null

正确答案:C

Javascript分为预处理阶段和执行阶段,尽管if里面的语句不会被执行,但是在预处理阶段还是会将其提升,因此最终还是undefined。
函数会先去找自己内部的变量,内部有就不会往外面找,内部没有才去外面找

var a = 1; function test() { console.log(a); if(false) { var a = 2; } } test(); //其实代码执行过程如下: var a ; a = 1; function test() { //函数会先去找自己内部的变量,内部有就不会往外面找,内部没有才去外面找 var a; //变量提升 console.log(a); if(false) { //因为false没有满足if的条件,所以不能进入if语句里进行赋值 a = 2; //if语句的条件把false改成true,就可以进入if语句赋值 } } test();

var 声明变量的特点:没有块级作用域、存在变量提升

没有块级作用域,使 var 声明的变量在 if 语句外可以被访问 存在变量提升,使 var 声明的变量提升到当前作用域的顶部,即 test 函数内的顶部 在 test 函数作用域中,局部变量 a 覆盖了全局变量 a 变量提升只提升声明而不提升赋值,故此时 a 的值为 undefined,随后打印输出

__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17835973.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示