当前位置:网站首页>let 块级作用域
let 块级作用域
2022-08-11 05:17:00 【-加油】
1、var 和 let 函数作用域
function fun(){
let a = 10;
console.log(a);// 输出10
}
fun();// 函数执行结束后会被js回收机制回收
console.log(a);//报错
函数执行结束后变量会被js回收机制回收
报错
function fun(){
var a = 10;
console.log(a);
}
fun();// 函数执行结束后会被js回收机制回收
console.log(a);//出错
2、同一作用域不可重复声明
function fun(a){
// let a = 10 这里会报错 在同一作用域下不可重复声明
console.log(a);
}
fun(1)
不在同一作用域:
function fun(a){
{
let a = 10; // 块级作用域
console.log(a);// 先输出10
}
console.log(a);//再输出 1
}
fun(1)
3、if{}块作用域
if(1){
let a = 3;
{
let a = 10;
console.log(a);//10 它的块级作用域1
}
console.log(a);//3 它的块级作用域
}
console.log(a); // 报错
4、for的
在for(; ; ) {}循环中 (; ;)为父作用域,{}为子作用域
//父作用域的i
for(let i = 0;i<3;i++){
//这两个i分别是父作用域、子作用域的i
//没有重复声明
let i ='ES6';//子作用域的i
console.log(i);//会输出3个ES6
}
而使用var时:
//使用var,把i提升到全局变量
for(var i = 0;i<3;i++){
var i ='ES6';// 把循环的i覆盖了
//所以下次循环不满足i<3
console.log(i);//会输出1个ES6
}
使用let但没有赋值时:
for(let i = 0;i<3;i++){
let i ;// 子重新定义了 但没有赋值
console.log(i);//三次undefined
}
没有在子作用域定义时:
使用父作用域的:
for(let i = 0;i<3;i++){
//子作用域没有i可以使用父作用域的i
console.log(i);//会输出0 1 2
}
修改父作用域的:
for(let i = 0;i<3;i++){
//在子中 没有定义i 所以还是使用了父的i
//把 父的i的值修改了
i ='ES6';// 所以第二次循环时满足不了i<3
console.log(i);//会输出一个ES6
}
重复定义:
for(let i = 0;i<3;i++){
//在子中定义 var i ,var 会提升
// 这样就与父的let i冲突,造成for(let i)时的重复定义
var i ='ES6';
//Identifier 'i' has already been declared
console.log(i);//报错
}
5、
使用var:
var fun = [];
//var i 把i提升到全局上循环时用的都是同一个window.i
for(var i =0;i<3;i++){
//该函数定义时并没有执行
fun[i] = function(){
//i 父作用域 由于是var 是全局作用域 随时被覆盖
console.log(i);//当调用函数执行时 i已经被覆盖
}
}
console.log(i);//3
fun[0]();//3
fun[1]();//3
fun[2]();//3
for(var i=0;i<3;i++){
//for又把i覆盖了 所以调用函数时输出的i不一样了
fun[i]();// 输出 0 1 2
}
console.log(i);//3
使用let:
var fun = [];
for(let i =0;i<3;i++){
fun[i] = function(){
//i 使用的是父作用域的
console.log(i);
}
}
// console.log(i);//Error: i is not defined
fun[0]();//0
fun[1]();//1
fun[2]();//2
for(let i=0;i<3;i++){
fun[i]();// 输出 0 1 2
}
//console.log(i);//Error: i is not defined
var fun = [];
for(let i =0;i<3;i++){
fun[i] = function(){
//子作用域重新定义i
let i = '修改i'
console.log(i);
}
}
// console.log(i);//Error: i is not defined
fun[0]();//修改i
fun[1]();//修改i
fun[2]();//修改i
边栏推荐
- C语言——文件操作函数 fseek、ftell、rewind详解
- 普林斯顿概率论读本读书笔记(阅读中......)
- LeetCode1166. Designing File Systems
- 使用Go语言开发的低代码应用引擎
- vftpd本地可以连接,远程连接超时的解决
- C语言动态内存分配(1)三种函数讲解
- [C language advanced] The first in-depth analysis of the storage of integer data in memory (1)
- 第6章 分支语句和逻辑运算符
- npm install 时报 npm ERR Cannot read properties of null (reading ‘pickAlgorithm‘)
- task04 Pytorch进阶训练技巧
猜你喜欢
随机推荐
LeetCode43.字符串相乘 (大数相乘可用此方法)
EOF, feof function, ferror function in C language
Object.defineProperty新增/修改属性数据代理
05-JS中的BOM和DOM
(3) How Redis performs stress testing
task06 PyTorch生态
Randomly generate uuid using rand function
C语言自定义类型——枚举类型讲解
C语言——文件操作(2)文件的读写操作
【win10+cuda7.5+cudnn6.0安装caffe①】安装cuda和cudnn
bootstarp作业一:制作分页器
Qt 字符串截取 查找字符串
Chapter 13 Class Inheritance-1
Some writing skills commonly used in Markdown
吃瓜教程task01 第1章 绪论
使用Go语言开发的低代码应用引擎
分布式日志存储架构设计方案
QtDataVisualization 数据3D可视化
如何设置pip安装的国内源
【背包】采药题解