JavaScripts之变量作用域提升问题(var、let、const)
2024-08-30 01:04:44
- 变量提升(Hoisting)
- var: 使用var在函数或全局内任何地方声明变量相当于在其内部
最顶上声明它
,这种行为称为Hoisting(提升)
注意:变量赋值的位置不会改变
function fn() {
console.log(x) // -> undefined
var x = 2
}
// 等同于:
function fn() {
var x // 变量提升到函数最顶部
console.log(x)
x = 2 // 赋值的位置不变
}
- let/const: 使用 let/const 定义变量是存在块级作用域({...})的,它同样存在
变量提升
,但是由于有临时死区
的概念,导致变量在未初始化的时候是不能够使用的(所以看上去是没有变量提升的)
function fn() {
console.log(x) // 报错 -> Cannot access 'name' before initialization
// var -> let 使得 x 存在临时死区,在未初始化之前是无法被使用的
let x = 2
}
// 正确方式
function fn() {
let x = 2 // 定义并初始化
console.log(x) // -> 2
}
- var: 使用var在函数或全局内任何地方声明变量相当于在其内部
- 变量的作用域
var:只存在函数作用域和全局作用域// 使用 var 在函数外部定义变量,会提升到全局作用域
var globalA = c
function fn() {
if(true) {
// 会在函数顶部定义 a = undefind, 所以在下方的console.log中能够正常输出
// 这里其实是 a = 1 赋值的步骤
var a = 1
} console.log(a) // -> 1
}
const/let: 局部作用域({ ... })
console.log(curA) // -> Cannot access 'curA' before initialization
// 只能在初始化后才能使用 curA
const curA = 'ccc'
console.log(curA) // -> 'ccc'
function fn() {
if(true) {
console.log(a) // a is not defined
}
let a = 1
}
最新文章
- 用PHPcms V9四步完成WAP手机站搭建
- Android学习笔记----TimerTask中显示Toast的问题
- bootstrap插件学习-bootstrap.typehead.js
- WPFの单例模式
- C# lock用法
- 【Hihocoder 1167】 高等理论计算机科学 (树链的交,线段树或树状数组维护区间和)
- javascript基础之变量和函数声明
- Android中常用的颜色
- 第九十节,html5+css3pc端固定布局,底部区域,说明区域,版权区域
- 重庆/北京/江苏KS/快乐时时/七星/福运来菠菜电商开奖修复APP网站SSC网站程序开发php
- es6中对象的类与继承方法
- Unique-paths (动态规划)
- Spring Boot Hikari
- codeForces 472D 最小生成树
- Linux通过NFS实现文件共享
- BZOJ.5251.[八省联考2018]劈配mentor(最大流)
- /etc/sysconfig/iptables 默认配置详解
- unity 背景无限循环滚动效果
- ASP.NET 工作流:支持长时间运行操作的 Web 应用程序
- 2018.11.01 NOIP训练 递增数列(迭代加深)
热门文章
- 【LeetCode】173. Binary Search Tree Iterator 解题报告(Python)
- DAGs with NO TEARS: Continuous Optimization for Structure Learning
- Distillation as a Defense to Adversarial Perturbations against Deep Neural Networks
- IOS 如何获取app更新链接 如【itms-apps://itunes.apple.com/cn/app/id1362432761?mt=8】
- HTML网页设计中 link 和 @import 的区别
- exit hook
- From Hero to Zero
- python 面向对象:类方法&;静态方法
- java mapreduce实现网站PV分析
- vue 图片拖拽和滚轮缩放