zoukankan      html  css  js  c++  java
  • ECMAScript 6 let和var区别和应用

    var 和let 不同处和应用

    (1) 作用域不同,let只局限于当前代码块{}

        <script>

    {
    var str = '张三';
    console.log(str);

    let str2 = '李四';
    console.log(str2);
    }
    console.log('124'+str); //有输出
    console.log('223'+str2); //报错
    </script>

    (2)let 声明的变量作用域不会被提升
    <script>
    {
    console.log(str);
    var str = '张三';
    这样打印会提示没有设置值。即 javascript 5里面 var 每次定义变量,都会提升到该段代码首部,
    但所赋值不会提升到首部,所有这样输出 会提示 没有 设置值。

    console.log(str1);
    let str1 = '张三1';
    而 javascript6 使用let不会提升, 会报错,变量没定义。
    }
    </script>

    (3)相同作用域,不能声明同一个变量,var 后面定义会覆盖前面定义值,let会报错。
    {
    var str = 'vvv';
    var str = 'haha';
    console.log(str); //后面覆盖前面

    let str2 = 'vvv';
    let str2 = 'haha';
    console.log(str2); //报错
    }

    应用差别:
    例如页面有 5个button,点击其中一个显示其序号
    var but = document.getElementsByTagName('button');
    for(var i=0;i<but.length;i++){
    but[i].onclick = function(){
    alert(i);
    }
    }
    var 会一直显示5;

    解决1,闭包,建立新作用域
    for(var i=0;i<but.length;i++){
    (function(i){
    but[i].onclick = function(){
    alert(i);
    };
    })(i);
    }

    解决2:把 var 换成 let
    for(let i=0;i<but.length;i++){
    but[i].onclick = function(){
    alert(i);
    }
    }


    疑问:为啥(2)(3),(2)有报错,但输出str提示了,而(3)报错直接终止了页面
    为啥 (4) var 点击任一个一直显示5?知道 var 赋值后面会覆盖前面, 闭包可以多了解下,哪块内容?
  • 相关阅读:
    创建可按比例调整的布局的 Windows 窗体
    Visual C# 2010 实现资源管理器
    Visual C# 2010 实现菜单项和状态栏
    使用异步事件在后台进行计算并报告进度
    A Byte of Python(简明Python教程) for Python 3.0 下载
    面向对象思想
    封装变化(二)
    好玩,看你的博客价值几何?
    基于消息与.Net Remoting的分布式处理架构
    设计之道
  • 原文地址:https://www.cnblogs.com/lola/p/9122950.html
Copyright © 2011-2022 走看看