精华内容
下载资源
问答
  • var let详解
    千次阅读
    2018-11-27 10:33:52

    ES6新增let命令,用来声明变量。let的用法和var有以下几点区别:

    1. 浏览器的预解析策略不同

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

        -var变量,无论var变量处于当前作用域的第几行,都将var变量提升到作用域的头部并初始化为undefine。

        -let变量,let变量也被提升到当前作用域的头部,但不初始化。

    2. 声明后未赋值,表现相同

    (function() {
          var varT;
          let letT;
          console.log(varT); //输出undefined
          console.log(letT); //输出undefined
        }());

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

    (function() {
      console.log(varT); //输出undefined
      console.log(letT); //直接报错:ReferenceError: letT is not defined
    
      var varT = 'test var OK.';
      let letT = 'test let OK.';
    }());

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

    (function() {
          var varT = 'test var OK.';
          let letT = 'test let OK.';
    
          var varT = 'varT changed.';
          let letT = 'letT changed.'; //直接报错:SyntaxError: Identifier 'letT' has already been declared
    
          console.log(varT); //输出varT changed.(注意要注释掉上面letT变量的重复声明才能运行)
          console.log(letT); //输出test let OK.
        }());

    5. 变量作用范围,表现不同:

    (function() {
      var varT = 'test var OK.';
      let letT = 'test let OK.';
    
      {
        var varT = 'varT changed.';
        let letT = 'letT changed.';
      }
    
      console.log(varT); //输出"varT changed.",内部"{}"中声明的varT变量覆盖外部的letT声明
      console.log(letT); //输出"test let OK.",内部"{}"中声明的letT和外部的letT不是同一个变量
    }());

    备注:

    使用 let 语句声明一个变量,该变量的范围限于声明它的块中。  可以在声明变量时为变量赋值,也可以稍后在脚本中给变量赋值。  

    使用 let 声明的变量,在声明前无法使用,否则将会导致错误。

    如果未在 let 语句中初始化您的变量,则将自动为其分配 JavaScript 值 undefined。

     

     

    更多相关内容
  • 在JavaScript中有三种声明变量的方式:varlet、const。但是有朋友不清楚这三种声明变量的区别,下面脚本之家小编给大家详细介绍下js中const、var和let的区别,感兴趣的朋友一起看看吧
  • var和let的区别

    千次阅读 2021-03-03 00:54:30
    var是函数作用域,let是块作用域。 在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的。 而let由于是块作用域,所以如果在块作用域内定义的变量...

    1、作用域不同

    var是函数作用域,let是块作用域。

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

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

    在这里插入图片描述

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

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

    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 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

    展开全文
  • Vue初学05-var和let的区别

    千次阅读 2020-03-13 09:12:54
    es5中var定义的变量只有全局作用域函数作用域,没有块级作用域的概念。es6中let有块级作用域,相当于是var的进一步完善。 下面以按钮点击为例,一共5个按钮,绑定点击事件,点到第几个按钮,提示第几个按钮被点击...

    es5中var定义的变量只有全局作用域和函数作用域,没有块级作用域的概念。es6中let有块级作用域,相当于是var的进一步完善。

    下面以按钮点击为例,一共5个按钮,绑定点击事件,点到第几个按钮,提示第几个按钮被点击。

    var

    <body>
          <div id="app">
              <button>button1</button>
              <button>button2</button>
              <button>button3</button>
              <button>button4</button>
              <button>button5</button>
          </div>
        <script>
            var btns = document.getElementsByTagName("button");
            for (var i = 0; i < btns.length;i++)
            {
                btns[i].addEventListener('click', function ()
                {
                    console.log("第"+i+"个按钮被点击!")
                });
            }
        </script>
    </body>

     运行结果如下图:

    无论点击哪个按钮都提示第5个按钮被点击,因为 i 没有块级作用域,点击事件在执行的时候 i 已经变成5了。

    let

    如果将var改成let,如下所示

    <body>
          <div id="app">
              <button>button1</button>
              <button>button2</button>
              <button>button3</button>
              <button>button4</button>
              <button>button5</button>
          </div>
        <script>
            var btns = document.getElementsByTagName("button");
            for (let i = 0; i < btns.length;i++)
            {
                btns[i].addEventListener('click', function ()
                {
                    console.log("第"+i+"个按钮被点击!")
                });
            }
        </script>
    </body>

    效果如下所示

     相当于每个按钮的点击事件都有一个自己的 i 变量,都是一个块级作用域。

     

    展开全文
  • for循环中的var和let的区别

    千次阅读 2019-08-24 17:10:37
    for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i) // 3s 后输出 3次3 }, 30 * 100) console.log(i) // 先输出 0 1 2 } 1、这道题涉及到了异步、作用域、闭包: settimeout是异步...
  • 基于Varlet的移动端应用模板 特性 自动配置路由 如下目录结构 src/ views/ home/ index.vue meta.js 会自动转成 import meta from '../views/home/meta.js' const routes = [ { path: '/home', component: ...
  • 微信小程序之 var和let区别

    千次阅读 2019-07-19 11:22:39
    letlet的方式声明的变量,为局部变量,该变量只会在最靠近{ }内的范围有效,出了{}之后,该变量就不能够再用了,否则会报该变量未定义的错误。也就是说,该变量的作用域为所在的代码块内。 //index.js //获取应用...
  • Javascript中var和let间差异

    千次阅读 2017-03-30 10:30:10
    let和const行为在词法环境中相同,但是var差异很大,var在早起被引入,现代Javascript一般不使用,但旧代码到处都是,本文详细说明,希望不让你迷惑。 示例1 两者相同function sayHi() { var phrase = "Hello"; // ...
  • let和var区别: for(var i=0;i<5 xss=removed>{ console.log(i);//5个5 },100) } console.log(i);//5 console.log('=============') for(let j=0;j<5 xss=removed>{ console.log(j);//0,1,2,3,4 },100) } ...
  • varlet的区别: var:函数作用域;存在变量提升;可重复定义;声明的变量会作为window的属性。 let:块级作用域;不存在变量提升(有暂时性死区);不可重复定义;声明的变量不会作为window的属性。 块级...
  • for循环绑定事件时,var和let声明循环变量的区别

    千次阅读 多人点赞 2018-03-31 20:24:54
    在理解varlet、const三者在声明变量的区别时,遇到了一道十分有意思的题:&lt;body&gt; &lt;ul&gt; &lt;li&gt;第一个li&lt;/li&gt; &lt;li&gt;第二个li&lt;/li&...
  • var varTest; let letTest; console.log(varTest); //输出undefined console.log(letTest); //输出undefined }()); 2.使用未声明的变量,表现不同 //一个例子 (function() { console.log(varTest); //输出...
  • js的var和let定义变量的坑

    千次阅读 2019-07-30 00:12:25
    let和const声明可以让变量在其作用域上受限于它所使用的块、语句或表达式。与var不同的是,这些变量没有被提升,并且有一个所谓的暂时死区(TDZ)。试图访问TDZ中的这些变量将引发ReferenceError,因为只有在执行到达...
  • JS中的var和let的区别

    千次阅读 2020-01-31 20:12:51
    let和var之间一共有4处区别: 01-作用域只局限于当前代码块 02-使用let生命的变量作用域不会被提升 03-在相同作用域下不能声明相同的变量 04-for循环体现let的父子作用域 我们会做几个例子来验证这这四处不同: 在这...
  • varlet、const的区别

    千次阅读 多人点赞 2021-10-29 16:21:31
    var 关键词 1. var声明作用域 var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问 function test() { var message = "hello world"; // 局部变量 } test(); console.log(message); // 报错 函数test()...
  • var let 的区别

    万次阅读 2021-10-09 11:18:46
    var let 都是声明变量的 let 不能重复声明变量 var 可以重复声明变量,重复声明的变量以最后一个为准 let 块级作用域,不存在变量提升 var 全局作用域,会变量提升 例如: <script> { let a = 11; ...
  • varlet和const之间的区别

    千次阅读 2021-06-26 16:06:18
    varlet和const之间的区别 区别一: var声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined。 let和const不存在变量提升问题,即它们所声明的变量一定要在声明后使用,否则报错。 区别二: var不...
  • JavaScript中let和var区别详解

    千次阅读 2020-07-06 15:10:05
    想要了解var(ES5)和let(ES6)区别,首先就要了解ES5下JS的变量提升 一、变量提升(声) 当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有带var/...
  • JavaScript中的 let var

    2021-11-01 14:42:26
    文章目录let varlet 的诞生let与var区别全局作用域函数作用域块作用域let var 重新声明constlet 应用场景 let var let 的诞生 在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域全局作用域,没有...
  • JavaScript中varlet和const的区别

    万次阅读 多人点赞 2018-07-14 15:04:05
    一、前言在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 ...let const 之间的区别。二、var如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如...
  • 微信小程序可以使用Javascript的最新ES6标准来开发所以微信小程序中var、let、const用法与区别可以...上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,v
  • JS 中 var let 的区别小结

    千次阅读 2018-07-19 10:04:22
    var 相比,let const 不存在变量提升。变量提升,指的是在变量声明之前就可以使用,只是,在声明之前,变量的值为undefined。var 声明的变量,在全局范围内都有效,而 let 声明的变量,只在 let 所在的作用域...
  • var和let类型的比较 如果使用的是var声明变量,则是全局变量(除在函数体内部);如果是let声明变量,则是局部变量。如果是使用循环的话,比如典型的for循环,推荐使用let定义增加或者较少的那个变量;若使用var声明...
  • 平常我们对于var和let,const,class的关注主要在他们的作用域的区别上,今天发现它们在属性上也是有一些区别的。 var命令function命令声明的全局变量,依旧是顶层对象的属性,也就是还是windowglobal的属性 ...
  • let, const 和var的区别

    千次阅读 2019-04-24 03:53:13
    let和var在for循环中的区别5. const在for循环中 总体来说,var和let的区别就是作用域的不同。 const和let是相同作用域,区别就是不可被重新赋值。 1. var定义的是全局变量 var a = 10; console.log(window.a...
  • let和var两个声明关键字非常的相似 ,但是实际上他们之间有明显的不同 。而const和let非常相似。但是又有一个明显的不同点,下边我们就看一下它们之间的区别与联系吧: 一、var和let的异同 在写法方面: //在写法上...
  • 1 var和let区别 let左右范围在块里面,var定义的变量可提升,用let声明的变量不可以声明2次 2 简单解构 let [a, b, c] = [1, 2, 3]; 3 map对象遍历 const map = new Map(); map.set('first', '...
  • let和const与var的区别

    2022-02-12 09:16:36
    四、循环中let和var声明的循环变量的区别 4.1 事件的绑定 4.2 循环变量存储的数据数值 4.2.1 var声明的循环变量 4.2.1 var声明的循环变量 一、定义 let和const是ES6新增的声明变量的关键词,之前声明变量的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 372,872
精华内容 149,148
关键字:

var和let