美文网首页
理解var、let、const

理解var、let、const

作者: HTAO濤 | 来源:发表于2021-04-26 08:35 被阅读0次

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

相关文章

  • 理解var、let、const

    1. var 会污染全局对象(易被忽略) var在全局声明的变量存在于VO(g)全局变量对象中,并且也会复制一份到...

  • Android菜鸟学习js笔记 一

    一、var,const,let区别? var 变量,const 常量,let块级变量。

  • ES6_var、let与const

    var,let 与 const var 申明变量。 let 申明变量,更完美的 var。 const 申明常量(物...

  • TypeScript 02 - 变量声明

    在 TypeScript 中,var 还是 var,let 还是 let,const 还是 const,这里简单温...

  • JS中var、let、const区别

    在javascript中有三种声明变量的方式:var let const。let var const的区别?var...

  • js中const,var,let区别

    在javascript中有三种声明变量的方式:var let const。let var const的区别?var...

  • 面试题 var let const的区别 箭头函数和普通函数的区

    var let const 有什么区别 var var声明的变量可进行变量提升,let和const不会var可以重...

  • ES6学习

    1、 var let const var是函数作用域let和const是块级作用域,!const是常量,不能改变。...

  • ES6

    let var const var 可声明前置 let不可声明前置 let不可重复声明 存在块级作用域 const...

  • let和const

    let/const(常用) let和var 区别 let,const用于声明变量,用来替代老语法的var关键字,与...

网友评论

      本文标题:理解var、let、const

      本文链接:https://www.haomeiwen.com/subject/wfysrltx.html