精华内容
下载资源
问答
  • var和let的区别

    2021-04-12 10:06:21
    var和let的区别作用域不同全局变量局部变量let不能在定义之前访问该变量,但是var可以。let不能被重新定义,但是var是可以的 作用域不同 var是函数作用域,全局变量,let是块作用域,块级变量。 在函数中声明了var,...

    作用域不同

    var是函数作用域,全局变量,let是块作用域,块级变量。

    在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的

    而let由于是块作用域,所以如果在块作用域内定义的变量,比如说在for循环内,在其外面是不可被访问的,所以for循环推荐用let

    全局变量

    指没有定义在任何函数内,直接定义在全局作用域中的变量。
    特点:随处可用,可重用。

    何时:希望随处可用,且可反复使用的变量,都要声明在函数之外的全局。

    局部变量

    指定义在函数内的参数和变量,都是局部变量。
    特点:仅函数内可用,出了函数不可用,不可重用。
    何时:希望变量只在函数内有效时,都要在函数内创建变量。

    let不能在定义之前访问该变量,但是var可以。

    let必须先声明,在使用。而var先使用后声明也行,只不过直接使用但没有定义的时候,其值是undefined。var有一个变量提升的过程,当整个函数作用域被创建的时候,实际上var定义的变量都会被创建,并且如果此时没有初始化的话,则默认为初始化一个undefined

    let不能被重新定义,但是var是可以的

    展开全文
  • var let 的区别

    2021-03-24 17:58:45
    2、let声明变量只能在代码块内使用 for(var i = 0; i < 10; i++) {} console.log(i) // 这里可以打印出i for(let i = 0; i < 10; i++) {} console.log(i) // 这里找不到i 3、let不存在变量提升 console....

    1、let不能重复声明

    // 浏览器不会报错的写法
    var a = 1
    var a = 2
    // 浏览器会报错的写法
    let a = 1
    let a = 2
    

    2、let声明的变量只能在代码块内使用

    for(var i = 0; i < 10; i++) {}
    console.log(i) // 这里可以打印出i
    
    for(let i = 0; i < 10; i++) {}
    console.log(i) // 这里找不到i
    

    3、let不存在变量提升

    console.log(i) // 这里可以打印出i
    var i = 1
    
    console.log(j) // 这里找不到j
    let j = 1
    
    展开全文
  • JS中var和let的区别

    2020-09-10 14:57:24
    var和let的区别: 区别: 1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象; 2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升; 3.let不允许在相同作用域内,重复...

    var和let的区别:

    区别:

    1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
    2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
    3.let不允许在相同作用域内,重复声明同一个变量。

    1.基本语法

    {
      let a = 125;
      var b = 521;
    }
    a // Uncaught ReferenceError: a is not defined
    b // 521
    

    总结:使用let声明的变量报错,var声明的返回正确的值,这说明,let声明的变量只在它所在的代码块有效。

    let配合for循环的应用
    for (let i = 0; i < 5; i++) {
      console.log(i); //0 1 2 3 4 
    }
    console.log(i); //ReferenceError: i is not defined
    
    

    上面代码中,计数器i只在for循坏体内有效,再循环体外引用就会报错。

    下面是常见的面试题目:
    for (var i = 0; i <10; i++) {  
        setTimeout(function() {  // 同步注册回调函数到 异步的 宏任务队列。
             console.log(i);        // 执行此代码时,同步代码for循环已经执行完成
          }, 0);
    }
    // 输出结果
    //10   共10个 
    

    如果把 var改成 let声明:

    // i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
    for (let i = 0; i < 10; i++) { 
      setTimeout(function() {
        console.log(i);    //  i 是循环体内局部作用域,不受外界影响。
      }, 0);
    }
    // 输出结果:
    0  1  2  3  4  5  6  7  8 9
    

    另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域

    for (let i = 0; i < 3; i++) {
      let i = 'love';
      console.log(i);
    }
    //输出:
    // love
    // love
    // love
    

    上面代码正确运行,输出了 3 次love。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

    2.变量提升问题

    var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。

    let命令则不同,它所声明的变量一定要在声明后使用,否则报错。

    // var 的情况
    console.log(ar); // 输出undefined
    var ar = 512;
        
    // let 的情况
    console.log(et); // 报错ReferenceError
    let et = 512;
    

    上面代码变量ar用var声明,会发生变量提升,因没有值,所以会输出undefined。变量et用let声明的则不会发生变量提升。
    上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

    ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。(使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。)

    总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

    不允许重复声明

    let不允许在相同作用域内,重复声明同一个变量。

    // 报错
    function func() {
      let a = 10;
      var a = 1;
    }
    
    // 报错
    function func() {
      let a = 10;
      let a = 1;
    }
    

    因此,不能在函数内部重新声明参数。

    function func(arg) {
      let arg; // 报错
    }
    
    function func(arg) {
      {
        let arg; // 不报错
      }
    }
    
    

    参考地址:https://www.jianshu.com/p/84edd5cd93bd

    展开全文
  • js中var和let的区别

    2020-07-27 21:48:26
    var和let的区别 ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 function func(){ let a = 100; var b = 10; } a // ReferenceError: a is not ...

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

    function func(){
      let a = 100;
      var b = 10;
    }
    
    a // ReferenceError: a is not defined.
    b // 10
    

    上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。

    展开全文
  • js变量var和let的区别

    2019-11-05 16:20:01
    js变量var和let的区别 在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域。 ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const,这两个关键字在 JavaScript 中提供了块作用域...
  • var 声明变量 let是更完美的var let声明的变量拥有块级作用域。...//var和let的区别 // 1、let声明的变量不存在预解析 // console.log(flag) // undefined(未定义) // var flag = 123 // console.log(flag...
  • JS中的var和let的区别

    2021-01-07 22:34:31
    let和var之间一共有4处区别: 01-作用域只局限于当前代码块 02-使用let生命的变量作用域不会被提升 03-在相同作用域下不能声明相同的变量 04-for循环体现let的父子作用域 我们会做几个例子来验证这这四处不同: 在这...
  • JS变量提升以及var和let的区别 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。 JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。 JavaScript 只有声明的变量会提升,初始...
  • 浅析var和let的区别:作用域和闭包 假如我们要写几个按钮,给每个按钮加上点击事件,输出每个按钮的序号,我们可能会这么写。 <body> <button>按钮1</button> <button>按钮2</button>...
  • 关键字var和let的区别: 参考:CSDN:一米阳光zw 变量提升也叫与处理机制,ES6中的let没有变量提升 变量提升: 参考:菜鸟教程 var变量提升,提升的是变量的声明,没有提升变量的初始化,所以未执行初始化
  • 求助var和let的区别

    2021-04-11 18:11:26
    <code class="language-html"><!... <..."... var td =... for(let i =...想问的问题是<strong> 当我把for循环里面的let换成var时会报错(如下图)</strong></p> ...请问let和var的区别?</strong></p>  </p>
  • 微信小程序 关于 var和let的区别以及数组的遍历 一、关于 var和let区别: let: 用let的方式声明的变量,为局部变量,该变量只会在最靠近{ }内的范围有效,出了{}之后,该变量就不能够再用了,否则会报该变量未定义的...
  • 关键字var和let的区别

    2020-08-18 15:48:01
    在使用webstorm编写前端代码的时候发现使用var变量时提示换成let,于是查了一下两个的区别,顺便做一个记录: 1、var属于ES5规范,let属于ES6规范   2、var有预处理机制,let没有。预处理机制也就是常说的声明提前...
  • 感觉写的有些不对的地方。然后自己写下自己的看法。如有不对,请多指正。...1.先了解一下var let 的区别吧。  http://es6.ruanyifeng.com/#docs/let 阮一峰老师写的let。写的很详细了。自己写下理解。 va...
  • js var和let的区别

    2019-01-14 16:00:43
    1.相同点:var和let都用于声明变量。 2.不同点:同一个变量名,可以用var重复声明,(浏览器)不会报错; 但是用let重复声明同一个变量名会报错。 参考:https://www.runoob.com/js/js-let-const.html ...
  • javascript中let和var的区别 let是ECMAScript 6.0中新增命令,也是用来声明变量的,但是平时只会使用var,它俩的区别在哪呢? let和var的区别体现在作用域上。var的作用域被规定为一个函数作用域,而let则被规定为块...
  • D8-var和let的区别

    2020-08-28 00:08:33
    上而下立即执行,而是继续做了一-些事情:把当前作用域中所有带var/function关键字进行提前声明定义=>变量提升机制 带var的只是提前声明( declare ) “var a;” 如果只声明没有赋值,默认值是undefined 带...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,963
精华内容 1,185
关键字:

var和let的区别