当前位置: 首页 > news >正文

变量提升函数提升

示例 1:变量提升

原始代码

console.log(x); // 输出: undefined
var x = 5;
console.log(x); // 输出: 5

提升后的代码(理解为):

var x; // 变量声明被提升
console.log(x); // 输出: undefined
x = 5; // 赋值
console.log(x); // 输出: 5

解析

  1. var x; 这条声明被提升到顶部。
  2. 第一个 console.log(x); 输出 undefined,因为 x 尚未被赋值。
  3. 然后 x = 5; 被执行,给 x 赋值为 5
  4. 第二个 console.log(x); 输出 5

示例 2:函数提升

原始代码

greet(); // 输出: Hello!function greet() {console.log("Hello!");
}

提升后的代码(理解为):

function greet() {console.log("Hello!");
}greet(); // 输出: Hello!

解析

  1. function greet() { ... } 这个函数声明会被提升到函数作用域的顶部。
  2. 函数可以在声明之前被调用,因此 greet(); 调用成功,并输出 "Hello!"。

示例 3:函数表达式的提升

原始代码

console.log(func); // 输出: undefined
var func = function() {console.log("This is a function expression");
}
func(); // 运行时会抛出错误: TypeError: func is not a function

提升后的代码(理解为):

var func; // 变量声明被提升
console.log(func); // 输出: undefined
func = function() {console.log("This is a function expression");
}func(); // TypeError: func is not a function

解析

  1. var func; 声明被提升,func 变量的值在此时是 undefined
  2. 第一个 console.log(func); 输出 undefined
  3. func 被赋值为一个函数。这时如果我们在没有调用前进行调用会因为 func 为 undefined 而抛出错误。
  4. 如果这里再调用 func();,会导致一个 TypeError,因为 func 没有赋值为实际的函数。

 

 示例 4:命名函数表达式的提升

原始代码

console.log(myFunction); // 输出: undefined
myFunction(); // TypeError: myFunction is not a functionvar myFunction = function hey() {console.log("Hello, world!");
};myFunction(); // 输出: "Hello, world!"

提升后的代码(理解为):

var myFunction; // 变量声明被提升console.log(myFunction); // 输出: undefined
myFunction(); // TypeError: myFunction is not a functionmyFunction = function hey() { // 赋值console.log("Hello, world!");
};myFunction(); // 输出: "Hello, world!"

解析

  1. var myFunction; 声明被提升,因此在第一次使用时,myFunction 是已声明的,但尚未赋值,因此其值为 undefined
  2. 当到达 myFunction(); 这一行时,myFunction 仍然是 undefined,因此会引发 TypeError,表示 myFunction 不是一个函数。
  3. 在 myFunction = function hey() { ... } 这行之后,myFunction 被赋予了一个函数引用,因此再调用 myFunction(); 时会输出 "Hello, world!"。

总结

  • 变量提升:只提升声明,不提升赋值。
  • 函数提升:提升整个函数声明,允许在函数声明之前调用。
  • 函数表达式:提升变量声明,赋值不会被提升,因此会导致 undefined

相关文章:

变量提升函数提升

示例 1:变量提升 原始代码: console.log(x); // 输出: undefined var x 5; console.log(x); // 输出: 5提升后的代码(理解为): var x; // 变量声明被提升 console.log(x); // 输出: undefined x 5; // 赋值 conso…...

el-table vue3统计计算数字

固定合计在最下列 父组件 <template><el-tablev-loading"loading"tooltip-effect"light":data"list"style"width: 100%":max-height"maxHeight"element-loading-text"拼命加载中...":header-cell-styl…...

IDE应当具备的功能

IDE 是辅助编程的工具&#xff0c;应当具备以下功能 语法高亮 显示注释 显示光键词 显示括号 matlab 自带的 IDE 没有这个功能 显示缩进 matlab 自带的 IDE 没有这个功能 显示字符串 显示数字常量 定位到函数的定义位置 Matlab 自带的集成开发环境&#xff08;IDE&am…...

Stable Diffusion初步见解(二)

Stable Diffusion 是一种先进的深度学习模型&#xff0c;用于生成高质量的图像和艺术作品。它基于扩散模型&#xff08;Diffusion Models&#xff09;&#xff0c;并结合了潜在扩散模型&#xff08;Latent Diffusion Models&#xff09;以及条件生成技术&#xff08;如文本到图…...

前端框架 react 性能优化

目录 一、不使用任何性能优化API进行优化 二、通过性能优化API优化 1、React.memo 2、useCallback 3、useMemo 4、PureComponent 三、总结​ 总览&#xff1a;react的优化核心思想就是让react跳过重新渲染那个些没有改变的Component&#xff0c;而只重新渲染发生变化的C…...

RK3568平台开发系列讲解(Input子系统篇)输入子系统介绍

🚀返回专栏总目录 文章目录 一、什么是输入子系统?二、输入设备和节点的关系沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是输入子系统? 在 Linux 中,input 子系统是专门为处理输入类设备而设计的一个子系统或框架。它提供 了一套通用的接口和机制,用于驱…...

准备阶段 Profiler性能分析工具的使用(一)

Unity 性能分析器 (Unity Profiler) 性能分析器记录应用程序性能的多个方面并显示相关信息。使用此信息可以做出有关应用程序中可能需要优化的事项的明智决策&#xff0c;并确认所做的优化是否产生预期结果。 默认情况下&#xff0c;性能分析器记录并保留游戏的最后 300 帧&a…...

go-rod vs Selenium:自动化测试工具的比较与选择

自动化测试是软件开发过程中的关键环节&#xff0c;它能够帮助我们发现缺陷、验证功能并提高软件质量。随着Web技术的快速发展&#xff0c;市场上出现了多种自动化测试工具&#xff0c;其中Selenium和go-rod是两个备受关注的选择。本文将从多个维度对这两个工具进行比较&#x…...

探索免费的Figma中文版:开启高效设计之旅

在当今数字化设计的浪潮中&#xff0c;Figma以其强大的云端协作功能和出色的设计能力&#xff0c;成为了众多设计师的心头好。而对于国内的设计师来说&#xff0c;能够免费使用Figma中文版更是一大福音&#xff0c;下面就来一起探索一下吧。 一、Figma中文版的获取途径 虽然F…...

功能齐全,支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』

功能齐全&#xff0c;支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 玩NAS的朋友基本都会在本地部署一款浏览器用来远程访问内网的网络设备&#xff0c;或者偶尔拿来浏览一些私密网站都是很方便的。 今天为大家分享的…...

部署实战(二)--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive &#xff08; Java 档案文件&#xff09;&#xff0c;它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中&#xff0c;多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…...

Ubuntu24.04——软件包系统已损坏

如果你在使用 Ubuntu 时遇到“软件包系统已损坏”的问题&#xff0c;可以尝试以下步骤来修复它&#xff1a; 更新软件包列表&#xff1a; 打开终端&#xff0c;运行以下命令以更新软件包列表&#xff1a; sudo apt update修复损坏的软件包&#xff1a; 运行以下命令来修复损坏的…...

2024年华为OD机试真题-空栈压数-C++-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 向一个空栈压入…...

嵌入式Linux基于IMX6ULL tslib学习总结

目录 1. tslib开源库介绍1.1 tslib主要功能1.2 架构 2. tslib代码简单分析2.1 ts_print_mt.c分析代码2.2 ts_setup代码分析2.3 ts_open代码分析2.4 ts_config代码分析2.5 ts_read_mt代码分析2.6 tslib中4个模块的含义 3. 使用tslib库打印触摸屏2点之间的距离 基于韦东山IMX6ULL…...

go中的参数传递是值传递还是引用传递?

在Go语言中&#xff0c;参数传递机制是一个重要的概念&#xff0c;它决定了函数内部对参数的修改是否会影响到原始数据。关于Go中的参数传递是值传递还是引用传递的问题&#xff0c;可以从以下几个方面进行解答。 一、值传递与引用传递的定义 值传递&#xff1a;在值传递中&a…...

记录一种在内核空间向用户空间通知中断的方法

记录一种在内核空间向用户空间通知中断的方法 0.前言1.代码实现1)内核设备驱动实现2)消息通知实现3)测试程序 2.解析 参考文章&#xff1a;Linux驱动实践&#xff1a;中断处理函数如何【发送信号】给应用层&#xff1f; 0.前言 最近在项目中遇到一个需求&#xff0c;需要将一个…...

.NetCore 过滤器和拦截器 的区别

Asp.NET Core 中的过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是两个不同的概念&#xff0c;但它们在某些方面有相似之处&#xff0c;也有明显的区别。 &#x1f511;过滤器&#xff08;Filter&#xff09; 过滤器是Asp.NET Core中用于…...

【笔记】自动驾驶预测与决策规划_Part7_数据驱动的预测方法

文章目录 0. 前言1. 多模态传感器的编码方式1.1 栅格化表示1.2 向量化表示 Vectornet1.3 基于点云或者多模态输入的预测1.4 基于Transformer的方法 2. 网络输出的表达形式2.1 多模态轨迹回归2.2 轨迹分类2.3 轨迹回归轨迹分类2.4 目标点预测 3.场景级别的预测和决策3.1 论文&am…...

React渲染相关内容——渲染流程API、Fragment、渲染相关底层API

React渲染过程依次遇到的函数 在React的渲染流程中&#xff0c;从组件的创建到其UI最终呈现到屏幕上&#xff0c;会经历一系列的生命周期方法和函数。这些方法和函数对于类组件&#xff08;Class Components&#xff09;和函数组件&#xff08;Function Components&#xff09…...

Python中dict支持多个key的方法

在Python中&#xff0c;字典&#xff08;dict&#xff09;是一种非常强大的数据结构&#xff0c;它允许我们通过键&#xff08;key&#xff09;来存储和检索值&#xff08;value&#xff09;。有时候&#xff0c;我们可能想要根据多个键来检索或操作字典中的数据。虽然Python的…...

低查重AI教材写作利器,一键生成丰富内容,让教材编写不再发愁!

关于AI工具在教材编写中的应用探讨 在编写教材时&#xff0c;如何才能更好地满足各类需求&#xff1f;不同年级的学生在认知能力上有着很大的不同&#xff0c;内容过于深奥或肤浅都不合适&#xff1b;教学场景也各有差异&#xff0c;例如课堂教学与自主学习&#xff0c;教材的…...

CANN-昇腾NPU-LoRA微调-显存只占5%怎么做到的

全量微调 Llama2-7B 需要更新 7B 参数&#xff0c;显存开销约 80GB。LoRA 只训练 0.5% 的参数&#xff08;约 35M&#xff09;&#xff0c;显存开销约 4GB。在昇腾NPU上 LoRA 微调是性价比最高的方案。 LoRA 原理 在原始权重 W 旁边加一个低秩矩阵 ΔW A B&#xff1a; 原…...

基于图神经网络的Java空安全注解自动推断技术解析

1. 项目概述&#xff1a;当机器学习遇见类型推断在Java开发中&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;堪称“程序员之敌”&#xff0c;它潜伏在代码的各个角落&#xff0c;是运行时崩溃的常见元凶。为了从根源上解决这个问题&#xff0c;可插拔类型…...

驳AGI学习不可行论:数据分布与归纳偏置是理论证明的关键

1. 项目概述&#xff1a;当复杂性理论遇上AGI学习的“不可能性”证明最近在AI理论圈子里&#xff0c;一篇题为《Reclaiming AI as a theoretical tool for cognitive science》的论文&#xff08;简称[VRGA24]&#xff09;引起了不小的波澜。这篇论文的核心主张相当大胆&#x…...

LangGraph+Spark智能代理框架:可视化编排大数据机器学习工作流

1. 项目概述与核心价值 如果你是一名数据科学家或机器学习工程师&#xff0c;每天都要和TB甚至PB级别的数据打交道&#xff0c;那么对Apache Spark一定不会陌生。它凭借其内存计算和弹性分布式数据集&#xff08;RDD&#xff09;的设计&#xff0c;确实让大规模数据处理的速度提…...

C#实现ASCII和字符串相互转换的代码示例

知识点 string 1 Stirng.Empty 表示空字符串。 此字段为只读。此字段的值为零长度字符串“”。string为引用数据类型。会在内存的栈和堆上分配存储空间。因此string.Empty与“”都会在栈上保存一个地址,这个地址占4字节&#xff0c;指向内存堆中的某个长度为0的空间&#xf…...

基于CNN的口腔鳞状细胞癌智能检测系统开发

1. 口腔鳞状细胞癌检测的技术挑战与解决方案口腔鳞状细胞癌&#xff08;OCSCC&#xff09;作为头颈部最常见的恶性肿瘤&#xff0c;其早期诊断面临三大技术瓶颈&#xff1a;首先是病灶的隐蔽性&#xff0c;早期病变常表现为微小白色斑块或溃疡&#xff0c;与普通口腔炎症难以区…...

高能物理数据分析实战:从W玻色子截面测量到机器学习应用

1. 项目概述&#xff1a;从海量对撞数据到物理发现如果你对宇宙的构成充满好奇&#xff0c;想知道我们是如何发现希格斯玻色子&#xff0c;或者顶夸克的质量是如何被精确测量的&#xff0c;那么高能物理数据分析就是你正在寻找的钥匙。这听起来可能离日常生活很远&#xff0c;但…...

C#中Activator的具体使用

Activator 是 C# 中用于动态创建对象实例的核心类&#xff0c;位于 System 命名空间。它通过**反射&#xff08;Reflection&#xff09;**机制&#xff0c;在运行时根据类型信息创建对象&#xff0c;而无需在编译时知道具体类型。&#x1f50d; 一、Activator的核心作用在不知道…...

Unity 2021.3新手实战:C#脚本+物理系统+UI交互三模块协同开发

1. 这不是“又一个Unity入门教程”&#xff0c;而是我带6个实习生从零做出可玩Demo的真实复盘你点开这个标题&#xff0c;大概率是刚装完Unity&#xff0c;对着空荡荡的Scene视图发呆——新建一个Cube&#xff0c;拖进一个C#脚本&#xff0c;写了个Debug.Log("Hello"…...