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

深入解析JavaScript中的变量作用域与声明提升

JS中的变量作用域

背景:

​ 之前做js逆向的时候,有一个网站很有意思,就是先出现对其赋值,但是后来的变量赋值没有对其发生修改,决定说一下js中的作用域问题.

全局作用域:

​ 全局作用域的变量可以在任何位置都进行修改,定义在最外面或者未定义的变量都称为全局变量。window对象调用全局对象,举个例子给大家理解

在这里插入图片描述

我们想想不加var有什么变化吗?没变化

在这里插入图片描述

var name='111'
function setname(){name='122';
}
setname();
console.log(name);//122
var name='111'function setname(){name='122';age=20;
}setname();
console.log(name);//122
console.log(age);//20

解释一下吧,因为age没有使用var,age进行定义,所有相当于全局变量了。

函数作用域:

函数定义内部的变量,无法被外部访问到。
在这里插入图片描述

function example() {if (true) {var y = 20;console.log(y);//20}console.log(y);//20
}
example();

深刻理解函数作用域指的是函数内部都可以,使用var声明的变量具有函数作用域,而不是块级作用域

块级作用域:

​ 块级作用域是指由一对花括号({})包围的代码块,它可以用来限定变量的作用范围。在块级作用域内声明的变量只在该作用域内部可见,外部作用域无法访问,多出现在if,switch语句中,。

function example() {if (true) {let x = 10; // 块级作用域内的变量console.log(x); // 输出 10}console.log(x); // 报错,x未定义
}//使用let关键字声明的变量具有块级作用域,只在声明的块内部有效
function example() {if (true) {const y = 20; // 块级作用域内的常量console.log(y); // 输出 20}console.log(y); // 报错,y未定义
}

varletconst

它的作用范围限定在if语句的块级作用域内

  • 使用let关键字声明的变量具有块级作用域,只在声明的块内部有效
  • const关键字声明的常量也具有块级作用域。
声明提升:
console.log(a);//undefined 
var a = 2;

错误想法:因为a没有在输出前定义,所以是undefined

其实编译的时候是这样:

var a;
console.log(a);
a = 2;

相当于 var a=2; 相当于 var a a=2 ;

立即执行函数:
(function(){...}()) //括号在内部,两者功能一样
(function(){...}) ()
var 与 let :

var允许重复声明,而let不允许重复声明

console.log(1111111111111)
var a = 12
console.log(a) //12
var  a = 13
console.log(a)//13

注意,浏览器会建议let是否重复声明,如果重复声明,则代码都不执行。

console.log(1111111111111)
let a = 12
console.log(a)//SyntaxError: Identifier 'a' has already been declared
let  a = 13
console.log(a)
http://www.lryc.cn/news/231230.html

相关文章:

  • 【Python】jupyter notebook(学习笔记)
  • 红色旅游AR互动体验将景区推向更广泛的市场
  • VR全景:打造虚拟政务服务,打通服务群众“最后一公里”
  • PyCharm 安装库时显示连接超时
  • 那些让我苦笑不得的 Bug:编码之路的坎坷经历
  • http接口测试—自动化测试框架设计
  • HTML 之常用标签的介绍
  • 数据恢复入门分享-启动扇区
  • 解决Chrome无法自动同步书签
  • Java绘图-第19章
  • SpringBoot文件在线预览实现
  • cudnn安装
  • uni-app发布后iOS端页面背景图片上下滑动问题
  • ctfshow 文件上传 151-161
  • Selenium浏览器自动化测试框架简单介绍
  • bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds: ceph-deploy mds
  • 【微前端】micro-app搭建项目实战
  • C语言——分割单向链表
  • 台式电脑的IP地址在哪里?解密台式电脑网络连接的秘密!
  • 设计模式案例 (三)
  • JZ22:链表中倒数第k个结点
  • python的高性能web应用的开发与测试实验
  • 除了http还有哪些通信协议?
  • 基于遗传算法的图像重建
  • 【Redis】Redis-Key的使用
  • 为忙碌的软件工程师精心准备的编码面试准备材料,超过 100,000 人受益!
  • SpringCloud Alibaba(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign
  • 基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码
  • Jenkins中强制停止停不下来的job
  • 北邮22级信通院数电:Verilog-FPGA(9)第九周实验(1)实现带同步复位功能、采用上升沿触发的D触发器