学废了,JavaScript中的作用域与作用域链

在JavaScript中,环境就像一把钥匙,决定变量的访问权限。
主要有三种类型:全局定位、局部定位和封闭定位。
全局作用域中的变量可以从程序中的任何位置访问,就像使用var访问变量一样。
变量在函数内是局部的,并且仅在函数内部可见。
如果您尝试从外部访问它们,将会报告错误。
ES6中let和const引入的变量属于封闭环境的范围,它们的变量值不会污染全局世界并且const是可变的。
链环境的概念就像一种感觉。
例如,当尝试访问func2内部的variable1时,它只会在func2的定义中搜索,而variable2将在上层全局范围中搜索。
在严格模式下,未声明的变量被隐式声明为全局变量,但在严格模式下,声明的变量将抛出分配错误或使用错误。
这有助于防止变量的意外污染。
一旦理解了目标,在编写代码时就不需要过多关注目标类型。
比如说,我们在家里找东西,首先在家里找,然后向亲戚朋友找,最后向社区求助。
最后建议使用var,避免不必要的变量污染。
同时,我们提供在线直播培训课程,帮助大家深入了解范围和目标链。

JavaScript的let、var、const声明变量的区别

简介

一个项目声明许多变量来存储数据。
您可以将变量视为盒子的名称,将盒子中保存的内容视为变量的值。

JavaScript允许您使用var、let、const和其他关键字来声明变量,例如:

vara;//声明一个盒子叫a=1;//改变值1放到这个盒子里//或者vara=1;letb=2;constc=3;var,let和const的区别

在前面的示例中,分别使用var、let和const以及这三个关键字来声明变量。
变量之间有什么区别?我们一起来看看吧。

var

使用var声明变量与在浏览器中声明全局变量是一样的,所以我们知道全局变量是window对象的属性。
声明一个变量相当于声明前一个窗口对象的属性。

vara=10;console.log(window.a==a);//输出true,没有块级作用域

块级作用域是ES6独有的概念,并且在ES5中仅是全局的。
由于作用域和函数作用域的原因,使用var声明的变量如果不在函数内声明,则为全局变量;如果在函数内声明,则为函数内的局部变量。

{vara=1;//全局变量letb=2;//只在当前作用域有效}console.log(a);//输出1console.log(b);//报错:bisnotdefine变量Promotionconsole.log(a)vara=1;

上例中,最终输出值为1。
这是因为该变量正在提升。
变量提升意味着当使用var声明变量时,在解析脚本时首先逐行执行声明该变量的所有语句,无论该变量是在何处声明的。
上述代码的执行顺序如下:

vara=1;console.log(a)允许重复声明

变量可以使用var重复声明,因此JavaSciprt允许以下语句:

vara=1;varb=2;let

let是ES6中新添加的关键字,用于替换avar关键字。
使用let声明的变量具有以下特征:

变量在声明之前不能使用。

声明后不能重新声明变量

不能提升变量

变量可以具有块级作用域

leta=1;leta=2;//如果再次声明,会报错console.log(b);//如果在声明之前使用,会报错letb=2;{letc=3;//仅在当前作用域有效}console.log(三);//读取未知的声明变量。
错误const

const用于声明常量。
所谓常量,是指声明的变量必须被赋值,并且在后续使用过程中不能重新赋值。

consta=1;consta=2;//重复声明,报错a=2;//重新声明,报错constb;//没有赋初值,对于声明为const的

变量报错,类似让。
没有变量的提升,并且如果存在块级作用域,则无法在范围之外读取变量的值。

另外,正如我前面所说,声明为const的变量不能重新赋值,如果对象或数组等引用类型常量声明为const,则该常量不能重新赋值,但对象可以更改属性和数组。
元素:

consta={x:1,y:2}a.name='test'//给对象添加属性可以运行a={name:'test'}//。
重新分配值。
错误consta=[];a.push('6666');//向数组添加一个元素,可以这样做a.length=0。
//重置数组的长度。
a=['test'];//重新赋值。
错误总结

通过根据上面的简单例子和对比,发现由于历史原因,使用var声明变量存在很多奇怪的问题。
这是因为ES6中引入了let和const来声明变量,而用let和const声明的变量可以拥有自己的块级作用域。
对于模块化程序很有用。

作者:程序员读物

JavaScript变量声明详解

JavaScript中变量声明的关键字是var、let和const。
使用var定义可以存储任何类型值的变量。
var定义的变量成为函数的局部变量,具有目标函数并自动提升到目标函数的顶部。
允许重复声明同一变量。
在全局环境中,使用var的变量会在要挂载的window对象中声明。
也声明变量,但与var有很大不同。
target有锁,在声明之前不能访问,没有提升变量。
声明的用法变量通常无法声明或提升到顶级目标。
变量是通过不在对象窗口中向上声明的,并且不同区域不会相互接触。
由相似的特征组成。
变量有一个内部可变常量,因为它被声明并且不能修改内存地址,但可以通过属性更改引用数据类型的值。
基本数据类型值存储在内存地址中,因此const定义的基本数据类型值无法更改。
通常在编写JavaScript代码时,遵循以下原则:先声明,后使用,建议使用第一个var。
变量可以连续声明,连续赋值遵循从左到右声明、从右到左赋值的规则。
总结一下JavaScript变量声明的要点:使用var定义变量、具有作用域函数、自动提升、可迭代声明、在全局作用域下填充窗口。
范围变化,不促销,不重复申报,各个账户互不接触。
常量定义的变量只能初始化,不能重复赋值,不改变内存地址,可以通过属性改变引用类型值。
遵循先声明、后使用的原则,先使用const>,以避免错误。
【练习】我们要理解并尝试使用var,让它成为一个变量来定义并成为常量。
该规则适用于各种声明的各种范围、救济和复制。
请注意常量变量的内部可变性以及如何通过属性修改关系数据类型的值。

JavaScript中变量声明var、let、const的区别

在JavaScript中,变量声明有3个关键字:var、let和const,每个关键字都有不同的特征和用途。
首先,var关键字用于声明全局范围或函数范围内的变量。
在函数外部声明的Var变量将被挂载到window对象上并被全局访问。
函数内部声明的Var变量也具有全局作用域。
如果没有显式指定作用域,该变量将自动成为全局变量。
用var声明的变量会被提升,即在使用之前声明它们,但值仍然存在。
其次,let关键字引入了块级作用域的概念,允许在特定的代码块内声明变量,将变量的作用域限制在声明它的代码块内,从而可以避免全局污染和作用域冲突。
应避免。
let声明的变量在声明之前不能使用,否则会出现错误,产生所谓的“临时死区”。
最后,const关键字在声明变量时给出常量的属性。
声明后变量值不能更改,但变量本身仍然可以指向不同的对象。
声明为const的变量也具有块级作用域,如果在声明之前使用将报告错误。
常量的使用场景包括不可变值、字符串等简单类型以及复合类型(数组、对象等)的引用地址。
简而言之,var全局或函数作用域适合声明变量,但有提升事件。
let和const提供更细粒度的控制,引入块级作用域和持久化特性,并避免变量污染和意外的副作用。
开发者应根据具体需求选择合适的变量声明关键字,以实现更安全、更高效的代码编写。