美文网首页
const let var

const let var

作者: 笃笃木鱼 | 来源:发表于2019-03-10 20:44 被阅读0次

let

块级作用域(一般情况下是{}内)

function varTest() {
    var x = 1;
    if (true) {
        var x = 2;  // 同样的变量!
        console.log(x);  // 2
    }
    console.log(x);  // 2
}

function letTest() {
    let x = 1;
    if (true) {
        let x = 2;  // 不同的变量
        console.log(x);  // 2
    }
    console.log(x);  // 1
}

块级作用域特例:

for (let expr1; expr2; expr3) statement

此处 expr1; expr2; expr3和 statement在同一隐含域块

解决循环中的问题

会和闭包环境绑定

var list = document.getElementById("list");

for (let i = 1; i <= 5; i++) {
  var item = document.createElement("LI");
  item.appendChild(document.createTextNode("Item " + i));

  let j = i;
  item.onclick = function (ev) {
    console.log("Item " + j + " is clicked.");
  };
  list.appendChild(item);
}

会依次打印出1 2 3 4 5

在程序或者函数的顶层,let并不会像var成为容器对象的属性

var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined

全局let不会变为窗口对象属性

MDN原文是top level of program and functiom,大部分理解为全局

暂存死区Temporal dead zone

同一作用域中,let重复定义一个变量会报错
let声明不会被提升到当前执行上下文顶部,提前引用会报错
块开始到变量用let初始化之前,这个变量处于“暂存死区”,ReferenceError

const

1.声明的同时要赋值(值不可更改)
2.块级作用域
3.无变量提升等(暂存死区)
4.全局常量不会变为窗口对象属性

var

作用域是整个封闭函数

hoisting:声明提升,赋值不会提升。

把所有的变量声明移动到函数或者全局代码的开头

可以重复声明且不会丢值

未声明的变量直接赋值

1.会隐式地声明为全局变量
2.执行赋值时,才会被创建
3.其特征值 configurable: false[ 声明的变量configurable: true]

相关文章

  • 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关键字,与...

  • js 2022经典面试题汇总

    1.JS数据类型有哪些 2.var、let、const区别 var存在变量提升,而let、const没有 let、...

网友评论

      本文标题:const let var

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