| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> var、let、const的区别以及js变量、函数提升 -> 正文阅读 |
|
[JavaScript知识库]var、let、const的区别以及js变量、函数提升 |
JavaScript 中的 Var,Let 和 Const 有什么区别 ES6 附带的功能之一是添加了let和const,可用于变量声明。 它们与var有何不同?在本文中,我们将讨论var,let和const的作用域,用途和变量提升,并指出它们之间的差异。
var在 ES6 出现之前,必须使用 var 声明。 但是,前端开发出现的一些问题与使用 var 声明的变量有关。 这就是为什么必须要有新的方法来声明变量。 var 的作用域作用域本质上是指变量/函数可供访问的范围。 var可以在全局范围声明或函数/局部范围内声明。 当在最外层函数的外部声明var变量时,作用域是全局的。 这意味着在最外层函数的外部用var声明的任何变量都可以在windows中使用。 当在函数中声明var时,作用域是局部的。 这意味着它只能在函数内访问。 要进一步了解,请查看下面的示例。
这里,greeter是全局范围的,因为它存在于函数外部,而hello是函数范围的。 因此,我们无法在函数外部访问变量hello。 因此,如果我们这样做:
我们会收到错误消息,这是由于函数外部没有hello导致的。 var 变量可以重新声明和修改这意味着我们可以在相同的作用域内执行下面的操作,并且不会出错
又比如
var 的变量提升变量提升是 JavaScript 的一种机制:在执行代码之前,变量和函数声明会移至其作用域的顶部。 这意味着如果我们这样做:
上面的代码会被解释为:
因此,将var声明的变量会被提升到其作用域的顶部,并使用 undefined 值对其进行初始化. var 的问题var有一个弱点。 我将使用以下示例进行说明:
由于times> 3返回 true,因此将greeter重新定义为saysay Hello。 如果你有是故意重新定义greeter,这段代码是问题的,但是当你不知道之前已经定义了变量greeter时,这将成为产生问题。 如果在代码的其他部分使用了greeter,这可能会导致代码中出现许多错误。 这就是为什么需要let和const的原因。 var 方式定义变量有啥 bugJs没有块级作用域请看这样一条规则:在JS函数中的var声明,其作用域是函数体的全部。
明明已经跳出 for 循环了,却还可以访问到 for 循环内定义的变量 a ,甚至连 i 都可以被放访问到 循环内变量过度共享
在浏览器里运行一下,看看和你预想的结果是否相同? 事实上,这个问题的答案是,循环本身及三次 timeout 回调均共享唯一的变量 ** i 。当循环结束执行时,i 的值为3。所以当第一个 timeout 执行时,调用的 i 当让也为 3 了。 话说到这儿,想必客官已经猜到 let 是干嘛用的。 作者:麻辣小隔壁 letlet现在已经成为变量声明的首选。 这并不奇怪,因为它是对var声明的改进。 它也解决了我们刚刚介绍的var问题。 让我们考虑一下为什么会这样。 let 是块级作用域块是由 {} 界定的代码块,大括号中有一个块.大括号内的任何内容都包含在一个块级作用域中. 因此,在带有let的块中声明的变量仅可在该块中使用。 让我用一个例子解释一下
我们看到在其代码块(定义它的花括号)之外使用hello会返回错误。 这是因为let变量是块范围的. let 可以被修改但是不能被重新声明.就像var一样,用let声明的变量可以在其范围内被修改。 但与var不同的是,let变量无法在其作用域内被重新声明。 来看下面的栗子:
但是,如果在不同的作用域中定义了相同的变量,则不会有错误:
为什么没有错误? 这是因为两个实例的作用域不同,因此它们会被视为不同的变量。 这个事实说明:使用let,是比var更好的选择。 当使用let时,你不必费心思考 🤔 变量的名称,因为变量仅在其块级作用域内存在。 同样,由于在一个块级作用域内不能多次声明一个变量,因此不会发生前面讨论的var出现的问题。 let 的变量提升就像var一样,let声明也被提升到作用域顶部。
Const用const声明的变量保持常量值。 const声明与let声明有一些相似之处 const 声明的变量在块级作用域内像let声明一样,const声明只能在声明它们的块级作用域中访问 const 不能被修改并且不能被重新声明这意味着用const声明的变量的值保持不变。 不能修改或重新声明。 因此,如果我们使用const声明变量,那么我们将无法做到这一点:
或者这个这样:
因此,每个const声明都必须在声明时进行初始化。 当用const声明对象时,这种行为却有所不同。 虽然不能更新const对象,但是可以更新该对象的属性。 因此,如果我们声明一个const对象为
同样不能像下面这样做:
但我们可以这样做:
这将更新greeting.message的值,而不会返回错误。 const 的变量提升就像let一样,const声明也被提升到顶部,但是没有初始化。 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:07:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |