讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

JavaScript变量提升与函数声明:为什么这段代码打印a的值是12而不是10?

老瑶姑娘_7184

老瑶姑娘_7184

发布时间:2025-03-15 09:28:01

|

693人浏览过

|

来源于php中文网

原创

javascript 变量提升与函数声明:代码执行结果分析

下图所示代码的执行结果并非12,而是10。让我们深入分析这段 JavaScript 代码,解释其执行过程和结果:

JavaScript变量提升与函数声明:为什么这段代码打印a的值是12而不是10?

var a = 10;
{
    a = 11;
    function a() {}
    a = 12;
    function a() {}
    a = 15;
}
console.log('a: ', a);

代码首先声明了一个全局变量 a 并赋值为 10。然后进入一个代码块 {}。在这个代码块中,关键在于 JavaScript 的变量提升和函数声明的优先级。

JavaScript 的提升机制:

在 JavaScript 中,函数声明会被提升到作用域的顶部。这意味着,在代码执行之前,解释器会先扫描代码,将所有函数声明移动到作用域的开头。变量声明(使用 var 声明的变量)也会被提升,但其值不会被提升,初始化为 undefined。

立即学习“Java免费学习笔记(深入)”;

因此,代码块内部的实际执行顺序如下:

  1. 函数声明提升: function a() {} (两次声明) 被提升到代码块的顶部。这使得 a 在代码块内成为一个局部变量,且为函数。 之前的 var a = 10; 声明的全局变量 a 与此局部变量 a 是不同的变量。

  2. 赋值: a = 11、a = 12、a = 15 这些赋值操作都作用于代码块内的局部变量 a (函数)。

  3. 代码块执行完毕: 局部变量 a 的值最终为 15,但这个局部变量在代码块结束后被销毁。

  4. 全局变量输出: console.log('a: ', a); 打印的是全局变量 a,其值仍然是初始值 10,因为它从未被代码块内的操作修改。

结论:

题目中给出的结果 12 是错误的。根据 JavaScript 的变量提升和作用域规则,这段代码的 console.log 语句应该打印出 10,而不是 12。 题目描述与实际执行结果不符。 代码块内的 a 是一个局部变量,它不会影响全局变量 a 的值。

相关文章

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

5285

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

2250

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

936

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

7083

2024.05.29

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

12325

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

5547

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2516

2025.12.25

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Qt Creator 快速入门文档
Qt Creator 快速入门文档

共0课时 | 0人学习

OpenClaw
OpenClaw

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn