精华内容
下载资源
问答
  • js ES6 let var const

    2020-08-11 12:54:32
    js ES6 let var const var 和let ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效 var 相比,letconst 不存在变量提升。变量提升,指的是在...

    js ES6中 let var const

    var 和let

    ES6 新增了let命令,用来声明局部变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效

    与 var 相比,let 和 const 不存在变量提升。变量提升,指的是在变量声明之前就可以使用,只是,在声明之前,变量的值为undefined。var 声明的变量,在全局范围内都有效,而 let 声明的变量,只在 let 所在的作用域内有效。

    首先来看var的变量提升:

     var a = "你好!";
          function fn(){
    
              console.log(a); // 使用a
              //首先查看函数内部有没有定义这个a 变量提升
    
              if(false){
                  var a = "扣肉!"; 
              }
          }
          fn(); //输出undefined
    

    这里吧if语句中的var a提升到到了consol的前面,相当于在consol的前面 有着 var a 但没有对a进行赋值。

    作用域提升 只是把定义 放在前面 赋值还是原来的位置

    for(var i = 0; i < 10; i++) {
        console.log(i)
    }
    console.log(i); // 10
    

    es6为js新增了块级作用域

       function fn() {
              let a = 5;
    
              if (true) {
                //let a = "扣肉!"; 
                console.log(a); //输出扣肉
              }
              console.log(a); //输出5
            }
            fn();
    

    允许块作用域可以任意嵌套

        	{
                {
                    let a = "1";
                }
                  let a = "2";
                  console.log(a);
            }
    
    var a = [];
          for (let i = 0; i < 10; i++) {
            a[i] = function () {
              console.log(i);//输出1 ,2,3,4,...10;
            };
              //若讲let换成var 则i为全局变量输出的是10。
          }
    

    另外let不存在变量提升:

       console.log(b); //
            var b = 1;
    
           var b;
           console.log(b)
           b = 1
    
            console.log(c); //
            let c = 2;
    

    暂时性死区

    只要块级作用域里面存在let声明 ,它所有声明的变量就会绑定这个区域 不再受外部影响

         var a1 = "苹果";
          if(true){
              a1 = "小欧"; //这一行代码就是一个死区
              let a1; // 变量的赋值 就是使用a1 ES6 规定必须要先声明 再去使用
          }
          console.log(a1);
    

    另外let不能声明同样的变量名

    {报错

    ​ let a = 1;

    ​ let a = 2;

    ​ }

     var a = 0;
            // ES5 全局的变量 是挂在 window下面 
            console.log(window.a);
            let b = 1; 
            console.log(b);
            {
                console.log(b);
            }
    

    const

    const定义的变量不可以修改,而且必须初始化

    const b = 2;//正确
     // const b;//错误,必须初始化 
     console.log('函数外const定义b:' + b);//有输出值
     // b = 5;
     // console.log('函数外修改const定义b:' + b);//无法输出 
    
    展开全文
  • JS中var与letconst的区别 2.var相比,letconst不存在变量提升。 变量提升是在变量声明之前就可以使用,只是变量值为undefined var 声明的变量在全局范围内有效,没有块的概念,可以跨块访问,不能跨函数访问 ...

    JS中var与let、const的区别

    1. 块级作用域 { }

        ES5 中作用域有:全局作用域、函数作用域。没有块作用域的概念。
        ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。
    

    2.与var相比,let和const不存在变量提升。

    变量提升是在变量声明之前就可以使用,只是变量值为undefined
    var 声明的变量在全局范围内有效,没有块的概念,可以跨块访问,不能跨函数访问
    let 声明的变量只在它所在的作用域内有效,不能跨块和跨函数访问
    const 声明常量,使用时必须赋值,只能在块级作用域访问,而且值不能修改

    2.浏览器预解析策略不同

    浏览器在运行代码之前会预解析,首先解析函数声明,变量定义,解析完后再对函数变量进行运算、赋值等

    无论var变量处于当前作用域的第几行,都将var变量提升到作用域的头部并初始化为undefined。
    let变量也被提升到当前作用域的头部,但不初始化。

    3.使用未声明的变量,表现不同

    let 先声明后使用,不然会报错
    const 先声明后使用,不然会报错
    var 则不会

    4.重复声明一个变量时,表现不同

    let不可以 重复声明变量
    const不可以 重复声明变量
    var可以重复声明变量

    展开全文
  • JS中 var let const 的不同 来源于 https://juejin.im/post/5d76a5dcf265da03ec2e8c2b 整理为自己可以理解的范围 在ES5中,用var关键字声明的变量存在变量提升,函数及变量的声明都将被提升到函数的最顶部,这就...

    JS中 var let const

    来源于 https://juejin.im/post/5d76a5dcf265da03ec2e8c2b 整理为自己可以理解的范围

    在ES5中,用var关键字声明的变量存在变量提升,函数及变量的声明都将被提升到函数的最顶部,这就导致可以在使用之后在声明变量,这种不规范的行为很多时候都依靠编程习惯来约束
    于是letconst应运而生,二者的作用域都是 当前代码块域let声明的变量可以修改const声明的是常量,声明后不可修改

    let foo = 10;
    const bar = {key: 20};
    foo = 20;
    bar.key = 30;
    bar = 30; // TypeError
    

    bar.key = 30这句话改变的不是bar的值,只是修改了其中的属性

    • 作用域的区别

    JavaScript 中 存在函数作用域 而没有块级作用域
    function 声明的就是一个函数作用域
    可以看到 代码1代码2 是两个不同的块级作用域, 但是都是同一个函数作用域

    function fn() {
    	console.log(fnA); // undefined
    	console.log(fnC); // undefined
    	console.log(fnD); //  fnD is not defined
    	// 代码1
    	var fnA = 100;
    	var fnB = 200;
    	if (true) {
    	 // 代码2
    		var fnC = 300;
    		let fnD = 400;
    	}
    	console.log(fnA); // 100
        console.log(fnB); // 200
        console.log(fnC); // 300
        console.log(fnD); // ReferenceError
    }
    

    let 声明的语句在 if 语句外面是不能被访问的 ReferenceError 引用错误的报错, 表示引用了一个没有声明的变量

    • 变量的提升
    console.log(a); // undefined
    console.log(b); // ReferenceError
    console.log(c); // ReferenceError
    var a = 100;
    let b = 200;
    const c = 300;
    

    可以看到 console.log(a) 输出的是 undefined , 说明使用var 声明的变量 一开始就会被提升到代码的最前面 变量提升
    但是 letconst声明的变量 不存在 变量提升 必须先声明后使用, 否则就会报错 : ReferenceError

    • 重复声明
    var a = 100;
    var a = 200;
    
    let b = 1000;
    let b = 2000; // SyntaxError
    

    使用 var 声明的变量可以重复声明赋值
    但是 letconst声明的变量不可以重复的声明赋值 会报语法错误 SyntaxError

    let 的简单理解

    来源于阮一峰的介绍说明

    1. let 没有变量提升的说法
    console.log(a) // undefined
    var a = 100
    
    console.log(b) // ReferenceError 引用错误
    let b = 100
    
    1. let块级作用域

    在没有块级作用域的 ES5 中 内层变量可能会覆盖外层变量
    在存在块级作用域的ES6 中 当存在多个代码块的时候 , 不同代码块的变量不受其他代码块的影响
    ES6 明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

    // 1. 在没有块级作用域的 ES5 中
    // 内层变量可能会覆盖外层变量
    function fnc() {
    	var a = 100
    	if(true) {
    		var a = 200
    	}
    	console.log(a) 
    }
    fnc()  // 200
    
    // 2. 在存在了 块级作用域的 ES6 中
    function fnc() {
    	let a = 100
    	if(true) {
    		let a = 200
    	}
    	console.log(a)
    }
    fnc() // 100
    
    1. let暂时性死区现象

    let暂时性死区现象 就是在块级作用域下产生的

    var tmp = 123;
    
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;
    }
    
    展开全文
  • const 定义了一个静态变量,定义时必须出初始化,否则会报错 因为定义的静态变量,所以对于基本类型的值,一旦定义,就无法改变 对于引用类型的值(数组,对象),一旦定义,引用的地址无法改变,即无法重新赋值为...

    const

    • 定义了一个静态变量,定义时必须出初始化,否则会报错
    • 因为定义的静态变量,所以对于基本类型的值,一旦定义,就无法改变
    • 对于引用类型的值(数组,对象),一旦定义,引用的地址无法改变,即无法重新赋值为新的数组或对象,只能在原有基础上对其属性进行改变

    let

    • 定义了一个局部变量,可以不用初始化,
    • 出了作用域自动销毁
    • 可随时变化

    var

    • let前身,可以使用var的地方就可以用let
    展开全文
  • let 相当于js中的var const 常量 letconst 作用块级(块级作用域) let注意: 1.没用解析,不存在变量提升 属于TDZ(暂时性死区) 2.不能重复定义变量 3.具备块级作用域 4.for 循环,for循环里面是父级作用域...
  • var是js中定义变量的方式。 不过ES6提出了letconst两种新的定义变量的方式。 接下来说一下这两种新的方式letconstvar的区别,以及使用时机。 const 我们用const定义常量。 被定义的常量无法再更改。 它var...
  • js中var,letconst的区别 ES2015(ES6) 新增加了两个重要的 JavaScript 关键字:letconstlet 声明的变量只在let 命令所在的代码块{} 内有效,在{}之外不能访问。 const 声明一个只读的常量,一旦声明,常量...
  • 在ES6新增的两个声明关键字letconst,它们和var一样都是用来声明的。let和var两个声明关键字非常的相似 ,但是实际上他们之间有明显的不同 。而constlet非常相似。但是又有一个明显的不同点,下边我们就看一下...
  • js中let与var,以及const的区别

    千次阅读 2018-12-21 15:25:51
    **!**let /var定义变量 ...如果未在 let 语句初始化您的变量,则将自动为其分配 JavaScript 值 undefined。 2,var 具有变量提升,可以重复定义 var定义的变量是全局变量或者函数变量。函数使用var关键字进行...
  • 序言var、letconst 都是 JavaScript 用来声明变量的关键字,并且 letconst 关键字是在 ES6 才新增的。既然都是用来声明变量的,那它们之间有什么区别呢?让我们来一探究竟。2.var let 的区别(1)作用...
  • js中const,var,let区别用法

    万次阅读 多人点赞 2018-07-09 10:48:04
    主要内容是:js中三种定义变量的方式const, var, let的区别。1.const定义的变量不可以修改,而且必须初始化。1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//...
  • 下面就是小编总结出的关于javascript中varES6规范中letconst区别详解 我们先来絮叨絮叨 var 方式定义变量有啥 bug ? Js没有块级作用域 请看这样一条规则:在JS函数中的var声明,其作用域是函数体的全部。 for...
  • JS中采用的是词法作用域,即变量作用域取决于变量所在的代码区域。 ES5中的作用域:全局作用域、函数作用域。 ES6新增作用域:块作用域。 全局作用域 在所有函数之外定义的变量拥有全局作用域,该变量为全局变量 ...
  • JS中var、letconst

    2020-11-03 07:30:36
    var与let 1、作用域不同 let声明的变量只在其所在代码块内有效。 var声明的变量在全局范围内有效。 var a = []; for(var i =0; i <10; i++){ a[i] = function(){ console.log(i); } } a[6]();//10 i 全局有效...
  • 有时候当我们用var定义变量的时候,时常要注意变量的作用区间,经常一不小心没注意就会出现错误,换成let定义的时候,就不会担心变量跨作用域。 例如: i的变量泄露 for(var i = 0 ; i<5 ; i++){ console.log(i)...
  • js var、letconst

    2020-07-05 18:51:03
    JavaScript 声明变量有三种方式,分别是var、letconst 本篇文章主要内容记录 var letconst 的区别 let 现代的变量声明方式 const const声明常量,它们不能被修改,一旦修改就会报错, var 1. var没有块级...
  • let与const

    2020-03-29 10:50:44
    Let & Const ...在a.js中定义 var first = ‘123’, 新建b.js,在b.js中还可以访问到first second = '1345' second没有使用var,拥有全局作用域,但不是全局变量。 变量不可以被删除,属性可...
  • 通过var定义的变量是挂在windos上的,而let与const并不会。 var a = 1; let b = 2; const c = 3; console.log(a,window.a); // 1 1 console.log(b,window.b); // 2 undefined console.log(c,w
  • var与let 相同点: 声明变量,被声明的变量的值可以被修改。如果声明时没有被赋值,默认值为undefined。 不同点: 变量作用域不同。var 声明的变量具有全局性而且有提前声明的效果。let关键字具有块级作用域就是在大...
  • JS:对比 letconst

    2020-07-19 18:02:45
    ES6 新增命令,用法var相似,但存在块级作用域,即let声明的变量只在当前的代码块起作用,且不存在变量提升。 { let a = "a"; var b = "b"; } console.log(a)//a is not defined console.log(b)//b 二、const...
  • 在这几句代码,for循环里面是一个独立的作用域,而循环体内又是一个独立的作用域。 var所声明的变量作用域确是全局都可以使用 而这一特性在特殊场合有很大的作用,建议let和var根据情况不同配合使用。 2:暂时性
  • 这篇文章主要介绍了let与var声明变量区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。 主要探讨let和var的作用域 ES6 新增了let命令,用来声明局部变量,所声明的变量,只在let...
  • 概述 使用var声明的变量,其作用域为该语句...使用const声明的是常量,在后面出现的代码不能再修改该常量的值。 var与let的区别 1.使用未声明的变量,表现不同 (function() { console.log(varTest); //输出un
  • JS中定义变量使用var/let/const 的区别 var声明的函数是块作用域 let声明的范围是块作用域 const声明的范围是块作用域 使用var声明的变量会自动提升到函数作用域顶部,反复多次使用var声明同一个变量也是没有问题的...
  • JS中let 、var 和const 区别及作用域 作用域控制着变量参数的可见性和生命周期。 1、块级作用域 任何一对花括号{}中的语句集都属于一个块,在括号内定义的所有变量在代码块外都是不可见的,为块级作用域,比如常用...
  • letconst、var是JS中的声明关键字 letconst 我们熟知的letconst的特性,常见的就有以下四点: 1.letconst声明的变量在未初始化之前不可以被使用。(暂时性死区TDZ) 2.letconst声明的变量,在同一个执行上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 387
精华内容 154
关键字:

js中let与const