精华内容
下载资源
问答
  • 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) } ...
  • 第一次接触let关键字,有一个要非常非常要注意的概念就是”javascript 严格模式”,比如下述的代码运行就会报错: let hello = 'hello world.'; console.log(hello); 错误信息如下: let hello = 'hello world.'; ...
  • JavaScript中let和var区别详解

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

    想要了解var(ES5)和let(ES6)区别,首先就要了解ES5下JS的变量提升

    一、变量提升(声)

    当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有带var/function关键字的进行提前的声明和定义 => 变量提升机制

    • 带var的只是提前声明(declare)var a;,如果只声明没有赋值,默认值是undefined
      例如:
    console.log(a);
    var a = 13;
    

    输出:undefined
    相当于:

    var a;		// 只声明没有赋值,默认为undefined
    console.log(a);
    a = 13;
    
    • 带function的不仅声明,而且还定义了(defined),准确来说就是让变量和某个值进行关联。

    二、let和var的区别

    1. letconst不存在变量提升机制

    创建变量的六种方式中:var/function有变量提升,而let/const/class/import都不存在这个机制

    2. var允许重复声明,而let不允许重复声明

    在相同的作用域(或执行上下文中)

    • 如果使用var/function关键词声明变量并且重复声明,是不会有影响的(声明第一次之后,之后再遇到就不会再重复声明了)
    • 但使用let/const就不行,浏览器会校验当前作用域中是否已经存在这个变量了,如果已经存在了,则再次基于let等重新声明就会报错

    在浏览器开辟栈内存供代码自上而下执行之前,不仅有变量提升的操作,还有很多其他的操作 => “词法解析”或者“词法检测”:就是检测当前即将要执行的代码是否会出现“语法错误 SyntaxError”,如果出现错误,代码将不会再执行(第一行都不会执行)

    console.log(1)  // => 这行代码就已经不会执行了
    let a = 12
    console.log(a)
    let a = 13      // => 此行出错:SyntaxError: Identifier 'a' has already been declared
    console.log(a)
    
    

    所谓重复就是:不管之前通过什么方法,只要当前栈内存中存在了这个变量,我们使用let/const等重复再声明这个变量就是语法错误。eg:

    console.log(a)
    var a = 12
    let a = 13  // => SyntaxError: Identifier 'a' has already been declared
    console.log(a)
    
    console.log(a)
    let a = 13
    var a = 12  // => SyntaxError: Identifier 'a' has already been declared
    console.log(a)
    
    3. let能解决typeof检测时出现的暂时性死区问题(let比var更严谨)
    console.log(a)
    // => ReferenceError: a is not defined
    

    typeof a 未报错

    console.log(typeof a)
    // =>  'undefined' 这是浏览器的bug,本应报错,因为没有a(暂时性死区)
    

    使用let后:

    console.log(typeof a)
    // => ReferenceError: Cannot access 'a' before initialization
    let a
    

    返回不能在a被定义之前使用它,解决暂时性死区问题。

    4. let创建的全局变量没有给window设置对应的属性

    首先看带var与不带var创建全局变量时的区别

    /*
     * 不带var的:相当于给全局对象window设置了一个属性a
     *      window.a = 13
     */
    a = 13
    console.log(a)  // => window.a 13
    /*
     * 栈内存变量存储空间
     *            b
     * 带var的:是在全局作用域下声明了一个变量b(全局变量),
     * 但是在全局下声明的变量也相当于给全局对象window增加了一个对应的
     * 属性b(只有全局作用域具备这个特点)
     */
    var b = 14
    console.log(b)
    console.log(window.b)
    

    不带var
    带var的
    使用let创建时:

    /*
     * 栈内存变量存储空间
     *   c
     * 带let的:仅仅在全局作用域下声明了一个变量b(全局变量),
     * 并未给全局对象window增加对应的属性c
     */
    let c = 15
    console.log(c)                          // => 15
    console.log(window.c)                   // => undefined
    

    let创建

    5. let会产生块级作用域

    经典例题指路:面试题总结2-大厂
    之“下面代码能否实现点击某个按钮,body的背景色改为按钮对应的颜色,若不能,如何改进(腾讯)”

    展开全文
  • const与let 一样不可重复声明,var可以重复申明变量 (2). var 是函数级作用域,let是块级作用域 例子:  {  let n = 10;  var m = 1;  }  结果:n // 会报错:ReferenceError:a is not defined.  结果:m // 1

    var
    函数级作用域 (没定义输出会undefined)
    let
    块级作用域 局部变量,仅在方法内有效(没定义输出会报错)
    const
    块级作用域 定义常量,不可修改
    const与let 一样不可重复声明,var可以重复申明变量

    (2). var 是函数级作用域,let是块级作用域
    例子:
      {
        let n = 10;
        var m = 1;
      }
      结果:n // 会报错:ReferenceError:a is not defined.
      结果:m // 1

    展开全文
  • let var区别

    2019-12-29 22:50:51
    var 的作用域是函数作用域; let 的作用域是块作用域。

    var 的作用域是函数作用域

    let 的作用域是块作用域

    例如

    let f= function () {
        let a = 9;
        var b = 9;
        if (true)
        {
            let a = 1;
            var b = 1;
        }
        console.log(a);
        console.log(b);
    }
    f();

    运行结果

    实际上,上述 typescript 代码编译成 javascript 后的结果如下

    var f = function () {
        var a = 9;
        var b = 9;
        if (true) {
            var a_1 = 1;
            var b = 1;
        }
        console.log(a);
        console.log(b);
    };
    f();

    可以看到,if 代码块中用 let 关键字定义的变量 a 编译后是生成了另一个变量 a_1

    展开全文
  • 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 变量,都是一个块级作用域。

     

    展开全文
  • var varTest; let letTest; console.log(varTest); //输出undefined console.log(letTest); //输出undefined }()); 2.使用未声明的变量,表现不同 //一个例子 (function() { console.log(varTest); //输出...
  • 在vue中let var const 区别

    万次阅读 2018-11-17 19:39:54
    let和const 使用方法:  (1).有没有感觉到在 javascript 使用var会发生变量提升,即脚本开始运行时,  变量已经存在了,但是没有值,所以会输出undefined。  而let不会发生变量提升,这表示在声明它之前,变量...
  • 文章目录let const var1、变量的提升2、var 没有作用域限制,let 有3、var 可以重复声明,let 不行4、const 可以用来声明常量 let const var 在 ES6 之前,js 中的变量声明,都是使用 var 的 但是,var 有如下...
  • 基于Varlet的移动端应用模板 特性 自动配置路由 如下目录结构 src/ views/ home/ index.vue meta.js 会自动转成 import meta from '../views/home/meta.js' const routes = [ { path: '/home', component: ...
  • var和let区别

    2021-03-03 00:54:30
    var是函数作用域,let是块作用域。 在函数中声明了var,整个函数内都是有效的,比如说在for循环内定义的一个var变量,实际上其在for循环以外也是可以访问的。 而let由于是块作用域,所以如果在块作用域内定义的变量...
  • 下面先让我们看看它 var 之间用法的不同  {  var a = 10;  let b = 8;  } a //10 b // Referenceerror :b is not defined 上面在代码块中声明了两个变量并分别赋值输出到控制台,结果a的变量成功输出,b的...
  • let和var区别

    2021-09-09 10:59:15
    let不存在变量提升,var存在 let同一个作用域不能重复定义同一个名称,var不可以 有严格的作用域,块级作用域
  • letvar区别

    2021-08-05 13:52:28
    1.作用域不一样 var来声明变量,只有函数作用域全局作用域,没有块级作用域,也就是说可以在代码块{}外部使用。而let可以实现块级作用域,只能在代码块 {} 内有效,在 {} 之外不能访问。 if(1==1){ let a=1 } ...
  • let var const的区别 变量提升(var允许 let和const不允许) 变量提升,即变量可以在声明之前使用,值为undefined console.log(a) // 正常运行,打印出 undefined var a = 1 ------------------------ console....
  • 在讲let和var区别前,我们先来了解一下JS中声明变量的几种方式 在ES6之前,常用的声明变量的方式 var 如: var a = 12; function 如: function A(){…},function是定义一个函数,实际上也相当于是创建变量的一...
  • 主要给大家介绍了在JavaScript中const、letvar对比的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
  • varlet-源码

    2021-03-18 15:18:15
    varlet
  • let const 以及var 区别

    千次阅读 2018-08-23 19:40:16
    ES5 只有全局作用域函数作用域,没有块级作用域,这带来很多不合理的场景。 ES6中增加了块级作用域的概念, let 命令 1. let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码...
  • 1,var可以声明同名变量,但let不可以; var a = 0; var a = 1; // 不会报错 let b= 0;...let的作用域是块级作用域,在内层循环中的i外层循环中的i不是同一个i,在内层的修改不会波及外层。 ...
  • JS中的var和let区别

    2021-01-07 22:34:31
    let和var之间一共有4处区别: 01-作用域只局限于当前代码块 02-使用let生命的变量作用域不会被提升 03-在相同作用域下不能声明相同的变量 04-for循环体现let的父子作用域 我们会做几个例子来验证这这四处不同: 在这...
  • ES6 新增了let命令,用来声明局部变量,所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束。...说明:在ES6之前只有全局作用域函数作用域,在ES6中新增了块级作用域,用{}花括号表
  • 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...
  • js let 和var有什么区别

    千次阅读 2019-07-14 14:46:46
    接下来我就说一下我对let和var的看法 首先,用var声明的变量会存在变量提升 也许你会问什么是变量提升 如下图 变量未定义直接使用就会报is not defined 但是如果你这样写的话,在控制台看到的就是undefined...
  • 主要介绍了jQuery中的for循环varlet区别 ,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • JavaScript中varlet和const的区别

    万次阅读 多人点赞 2018-07-14 15:04:05
    一、前言在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 ...let const 之间的区别。二、var如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如...
  • //使用var声明,得到3个3 var a = []; for (var i = 0; i < 3; i++) { a[i] = function () { console.log(i); }; } a[0](); //3 a[1](); //3 a[2](); //3 //使用let声明,得到0,1,2 var a = []; for (let i =...
  • let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢? let和var区别体现在作用域上。var的作用域被规定为一个函数作用域...
  • ES6—let、const和var区别 ES6 新增了let命令,用来声明变量,新增了const命令,用来声明常量,它的用法类似于varlet a = 1; var b = 2; const PI = 3.14; 主要区别 块级作用域 //let声明的变量const声明的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 325,941
精华内容 130,376
关键字:

letvar和的区别