var、let、const被你忽略的区别

简介: 本文主要讲var、let、const的区别

1. var 会污染全局对象(易被忽略)


var在全局声明的变量存在于VO(g)全局变量对象中,并且也会复制一份到GO中,let和const不会。注意这个仅限于在全局申请的变量。var声明的变量会污染全局对象,let、const不会。


var a = 1;
window.a // 1


let a = 1;
window.a //undefined


const a = 1;
window.a //undefined


2. var是可以重复申明


var是可以重复申明的,词法解析可以审核通过,执行阶段遇到已经申明过的,不会重复申明,但是let不行,在词法解析阶段都过不去,不也存在引擎去执行代码的阶段了。


3. var存在变量提升


var存在变量提升,let、const不存在变量提升,还有一种说明是let、const存在变量提升,只是在申明的地方到提升的这区间中,存在一个暂时性死区,在这区间内使用变量会报错。


4. let、const可以形成块级作用域,var不会形成块级作用域



for(let i = 0; i < 5; i++) {
    setTimeout(() => {
        console.log(i);
    }, 10);
}
// let的实现原理其实和闭包是一样的
{
    // 1、let会先形成一个父块作用域,计数器累加
    let i = 0; 
    {
        // 每一次循环形成一个子块级作用域
        let i = 0; // i每次递增
        setTimeout(() => {
            console.log(i);
        }, 10);
    }
    i++;
}


5. let、const会形成一个暂时性死区,var不会


网络异常,图片无法展示
|


6. 指针的变化



let、const都是ES6新增声明的变量的语法,区别是let创建的变量是可以更改指针指向,也就是可以重新赋值,但是const申明的变量是不允许改变指针指向的。


7. 形参重新声明(易被忽略)


函数执行的时候,如果设置了形参变量(并且部分形参变量设置了ES6中的形参赋值默认值),这样在形成私有上下文的时候,会多创建一个块级上下文(函数的大括号单独看成一个块级上下文),并且在当前块级作用域上下文中重新声明了形参。


var x = 1;
function func(x, y = function func1() {x = 2;}) {
    var x = 3;
    y();
    console.log(x); // x = 3
}
func(5);
console.log(x); // x = 1
var x = 1;
function func(x, y = function func1() {x = 2;}) {
    x = 3;
    y();
    console.log(x); // x = 2
}
func(5);
console.log(x); // x = 1



目录
相关文章
|
JavaScript 前端开发
var let const 的区别
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82820647 ...
990 0
|
JavaScript 前端开发
var let const的区别
`var`、`let`和`const`是用于声明变量的关键字,在 JavaScript 中具有不同的作用和用法。
|
9月前
|
JavaScript 前端开发
let,const,var区别
let,const,var区别
52 0
|
安全
var和let/const的区别
内容: var和let/const的区别 块级作用域 不存在变量提升 暂时性死区 不可重复声明 let、const声明的全局变量不会挂在顶层对象下面 const命令两个注意点: const 声明之后必须马上赋值,否则会报错 const 简单类型一旦声明就不能再更改,复杂类型(数组、对象等)指针指向的地址不能更改,内部数据可以更改。 为什么需要块级作用域? ES5只有全局作用域和函数作用域,没有块级作用域。 这带来很多不合理的场景: 内层变量可能覆盖外层变量 用来计数的循环变量泄露为全局变量
182 0
var和let/const的区别
|
JavaScript 前端开发
var、let、const的区别和推荐使用
var、let、const的区别和推荐使用
|
JavaScript 前端开发
var、let、const的区别
var、let、const的区别
158 0
|
自然语言处理 JavaScript
var,let和const深入解析(二)
接着介绍var与let,const在提升的区别,还有随之而来的临时死区和双定义的问题的探讨
940 0

热门文章

最新文章