JavaScript,js中的let作用域是如何生效的?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在本文中,苏南大叔介绍javascript
的最基本概念的let
。多数情况下,它和var
基本上是一致的。本文的let
的测试代码,都是源自var
的相似代码的替换表述,本文的姊妹文章链接地址见文末。
本文测试环境:win10
,chrome@89.0.4389.90
。你真的了解了let
的使用方法了么?let
和var
的使用区别,你看出来了吗?
系列文章
本文是系列文章第二篇:
- 《js中的var作用域是如何生效的?》 https://newsn.net/say/js-var.html
- 《js中的let作用域是如何生效的?》 https://newsn.net/say/js-let.html
- 《var和let到底有啥区别》 https://newsn.net/say/js-var-vs-let.html
- 《再次举例对比let和var的区别,为什么使用let》 https://newsn.net/say/js-var-vs-let-2.html
let
定义之前不能使用变量
无论是否是严格模式,在let
定义之前,都不能使用未定义的变量名,否则会得到下面的报错信息。
Uncaught ReferenceError: Cannot access 'a' before initialization
所以,在使用let
定义变量之前,决定不能出现未使用关键词的同名变量。这也是本文中一个需要了解的重要前提,因为这个显示,对相关测试代码都做了修正。
严格模式下,也不能出现不使用关键词的变量定义。但是,两者的报错信息是不一样的。
作用域范围有限
let
的作用域有限,不会提升到{}
作用域之外。下面是对应的代码及运行结果截图。
"use strict";
let a="苏南大叔";
{
//console.log("1",a);
let a="苏南大叔加油";
console.log("2",a);
}
console.log("3",a);
"use strict";
let a="苏南大叔";
(function(){
//console.log(a);
let a="苏南大叔加油呀";
console.log(a);
})();
console.log(a);
当然,定义在顶端的let
就是全局的作用域了。如果{}
没有出现再次定义的let
的话,那么就改变的是全局。请看下面的代码及运行结果。
"use strict";
let a="苏南大叔";
(function(){
//console.log(a);
a="苏南大叔加油呀";
console.log(a);
})();
console.log(a);
相关链接
总结
本文中的let
的用法,和var
是有所区别的,你细品一下。更多js
基本知识,可以参见苏南大叔的更多文章:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。