js变量和函数提升

news2024/9/22 17:30:06

1、变量提升

变量提升是JavaScript 中比较“奇怪”的现象,它允许在变量声明之前即被访问 (仅存在于var声明变量)

注意:
1.变量在未声明即被访问时会报语法错误
2.变量在var声明之前即被访问,变量的值为 undefined
3.let/const声明的变量不存在变量提升
4.变量提升出现在相同作用域当中
5.实际开发中推荐先声明再访问变量

变量提升核心:

代码在执行之前,先去检测当前作用域下所有var声明的变量
并把var声明的变量,提升到当前作用域的最前面。
只提升变量,不提升赋值。

<script>
    console.log(num+"件");
    var num=10;
</script>

在这里插入图片描述
上面的代码,就相当于:

<script>
	var num//只提升变量
	console.log(num+"件");
	num=10;//赋值不提升
</script>

又例如:

function fn() {
    console.log(num + "件");
    var num = 10;
}
fn();

在这里插入图片描述

function fn() {
     var num//变量提上
     console.log(num + "件");
     num = 10;//赋值不提升
}
fn();

初学者经常花很多时间才能习惯变量提升,还经常出现一些意想不到的bug,正因为如此,ES6 引入了块级作用域用let 或者const声明变量,让代码写法更加规范和人性化。

2、函数提升

会把所有的函数声明到当前作用域的最前面
只提升函数声明,不提升函数调用

fn();
function fn() {
    console.log('函数提升');
}

在这里插入图片描述
就相当于:

function fn() {
    console.log('函数提升');
}
fn();

函数表达式必须先声明,再调用

fn();
var fn=function(){
    console.log('函数表达式');
}

在这里插入图片描述
因为var fn=function(){
console.log(‘函数表达式’);
}
相当于赋值,可以理解成普通变量的赋值,
然后var 声明的变量会有变量提升。
即:

var fn
fn();
fn=function(){
    console.log('函数表达式');
}

在这里插入图片描述
第二行的fn(); 相当于调用函数,但var fn不是一个函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqli-labs通关lesson36-40

1.lesson36 union select判断注入&#xff1a;为单引号注入?id1%df-- 查数据库&#xff1a;?id-1%df union select 1,2,database()-- 2.lesson-37 报错注入判断注入&#xff1a;为单引号注入通过下方判断password为单引号注入unamez&passwdg%df -- &submitSubmit查数…

神经网络之反向传播算法(自适应梯度算法Adagrad)

文章目录自适应梯度算法&#xff08;Adagrad&#xff09;1、算法原理2、算法实现2.1 训练过程2.2 测试过程及结果3、参考源码及数据集自适应梯度算法&#xff08;Adagrad&#xff09; 自适应梯度算法&#xff08;Adaptive gradient algorithm&#xff0c;Adagrad&#xff09;与…

惊!初中生也来卷了……

大家好&#xff0c;我是良许。 前两天在抖音直播的时候&#xff0c;突然来了一位不速之客…… 他自称是初中生&#xff0c;一开始我还有点不太相信&#xff0c;直到跟他连麦&#xff0c;听到他还略带一些稚嫩的声音&#xff0c;我才知道&#xff0c;他没有骗我…… 他说他想学…

Dynamic Movement Primitives (DMP) 学习

Dynamic Movement Primitives (DMP) 学习 【知乎】Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真 1. DMP的建模过程 链接&#xff1a;Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真 - 知乎 (zhihu.com) 沙漏大佬&#xff01;&#xff01;&am…

转行软件测试需要学习哪些知识点?来来来,都给你汇总在这里啦!

都说IT互联网行业吃香&#xff0c;那么如何才能高效转行&#xff0c;习得一技之长换取心仪offer&#xff1f; 一般来说&#xff0c;0基础小白想转行到软件测试行业&#xff0c;按照如下学习逻辑肯定是错不了的&#xff1a; 1.零基础小白入门篇&#xff08;学前扫盲&#xff09…

ThinkBook15电脑开机后马上蓝屏不能使用怎么办?

ThinkBook15电脑开机后马上蓝屏不能使用怎么办&#xff1f;最近有用户使用的ThinkBook15电脑出现了开机之后屏幕蓝屏的情况。出现这个问题&#xff0c;是系统底层的故障&#xff0c;一般用户很难找出问题进行彻底解决。但是我们可以通过以下重做系统的方法来恢复电脑系统的使用…

阶段二11_面向对象高级_学生管理系统案例3

主要功能&#xff1a; 完成学生信息添加&#xff0c;修改和删除功能。 一.查看学生 思路&#xff1a; 图片&#xff1a;5_查看学生思路图.png 代码&#xff1a; StudentController[客服类中] //查找学生 private void findAllStudent() {//1.方法内部创建StudentService业…

Nacos 使用Postgresql数据库制作镜像

构建前提在 Nacos 2.2.0支持postgresql数据库基础上进行构建github地址&#xff1a;个人仓库编译打包源码mvn -Prelease-nacos clean package install -Dmaven.test.skiptrue若想跳过pmd和checkstyle检查请使用mvn -Prelease-nacos clean package install -Dmaven.test.skiptru…

Vue 3.0 组合式API 介绍 【Vue3 从零开始】

提示 在阅读文档之前&#xff0c;你应该已经熟悉了这两个 Vue 基础和创建组件。 在 Vue Mastery 上观看关于组合式 API 的免费视频。 通过创建 Vue 组件&#xff0c;我们可以将接口的可重复部分及其功能提取到可重用的代码段中。仅此一项就可以使我们的应用程序在可维护性和…

SAP ERP系统PP模块计划策略2050详解

SAP/ERP系统中面向订单生产的计划策略主要有20和50两个策略&#xff0c;这两个策略都是面向订单生产的计划策略&#xff0c;也是离散制造行业应用比较广泛的策略。它们之间最大差异就是在于20策略完全是由订单驱动&#xff0c;而50策略是预测加订单驱动&#xff0c;本文主要介绍…

【Leetcode 剑指Offer】第 14 天 搜索与回溯算法(中等)

文章目录剑指 Offer 12. 矩阵中的路径DFS剪枝面试题13. 机器人的运动范围剑指 Offer 12. 矩阵中的路径 典型矩阵搜索题 DFS剪枝 深度优先搜索&#xff1a; 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归&#xff0c;先朝一个方向搜到底&#xff0c;再回溯至上…

实现迭代回声服务器端/客户端

文章目录1.迭代服务器端/客户端2.迭代回声服务器端/客户端2.1 echo_server.c2.2 echo_client.c3.回声客户端存在的问题4.回声客户端问题解决方法1.迭代服务器端/客户端 之前讨论的 HelloWorld 服务器端处理完 111 个客户端连接请求即退出&#xff0c;连接请求等待队列实际没有…

唯品会盈利十年:韧性有余,冲劲不足

配图来自Canva可画唯品会在电商市场是一个特殊的存在&#xff0c;从2012年第四季度首次盈利至今&#xff0c;唯品会已经连续十年保持盈利。这十年&#xff0c;电商产业逐渐走向成熟&#xff0c;电商玩家新老接替成层出不穷&#xff0c;曾经家喻户晓的蘑菇街、聚美优品、苏宁易购…

Vue2.0开发之——购物车案例-Goods组件封装-商品数量的加减及总数量(53)

一 概述 Goods点击加减实现修改数量的原理Goods点击增加实现实例Goods点击-减少实现实例Footer计算商品总数量 二 Goods点击加减实现修改数量的原理 点击Counter组件里面的加减&#xff0c;修改Counter组件里面的数量Counter组件的数量变化时&#xff0c;Goods商品的数量相应…

leetcode-每日一题-807(中等,数组)

正常情况第一眼看这道题&#xff0c;看懂意思的话很简单就可以解出来。给你一座由 n x n 个街区组成的城市&#xff0c;每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid &#xff0c;其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。城市的…

C++各类设计模式及实现详解

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性&#xff1a;封装、继承、多态&#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程&#xff0c;需要大量实践经验的积累。最近看设计模式的书&#xff0…

Jetpack Compose 中的重组作用域和性能优化

只有读取可变状态的作用域才会被重组 这句话的意思是只有读取 mutableStateOf() 函数生成的状态值的那些 Composable 函数才会被重新执行。注意&#xff0c;这与 mutableStateOf() 函数在什么位置被定义没有关系。读取操作指的是对状态值的 get 操作。也就是取值的操作。 从一…

Rasa 3.x 学习系列-Rasa [3.4.4] - 2023-02-17新版本发布

Rasa 3.x 学习系列-Rasa [3.4.4] - 2023-02-17新版本发布 任何人都可以学习Rasa之优秀Rasa学习资源推荐 欢迎同学们报名Gavin老师的Rasa系列课程,任何人都可以学习Rasa之优秀Rasa学习资源推荐: 1.NLP on Transformers高手之路137课 2 .Rasa 3.X 智能对话机器人案例开发硬核…

Linux如何性能优化,怎么理解平均负载?如何利用系统缓存优化程序的运行效率?内存泄漏如何定位和处理?如何“快准狠”找到系统内存存在的问题?

Linux如何性能优化&#xff0c;怎么理解平均负载&#xff1f;如何利用系统缓存优化程序的运行效率&#xff1f;内存泄漏如何定位和处理&#xff1f;如何“快准狠”找到系统内存存在的问题&#xff1f;1. 性能优化1.1 性能指标1.2 到底应该怎么理解"平均负载"1.3 平均…

插件系列 vue2安装tailwindcss

先说结论&#xff0c;tailwindcss在vue2中引入&#xff0c;可以与其它css预处理混用&#xff0c;并不冲突, vue3可以直接参考官网的安装方式即可。 官方网址&#xff1a;https://www.tailwindcss.cn/ 安装步骤&#xff1a; 直接安装 创建文件 tailwindcss.css main.js全局引…