zoukankan      html  css  js  c++  java
  • JavaScript var、let、const

    var申明的变量是有作用域的

    如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量:

    'use strict';
    
    function foo() {
        var x = 1;
        x = x + 1;
    }
    x = x + 2; // ReferenceError! 无法在函数体外引用变量x  

    由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:

    'use strict';
    
    function foo() {
        var x = 1;
        function bar() {
            var y = x + 1; // bar可以访问foo的变量x!
        }
        var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!
    }
    

     JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:

    'use strict';
    
    function foo() {
        var x = 'Hello, ' + y;
        console.log(x);
        var y = 'Bob';
    }
    
    foo();
    
    局部作用域
    
    由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的:
    
    'use strict';
    
    function foo() {
        for (var i=0; i<100; i++) {
            //
        }
        i += 100; // 仍然可以引用变量i
    }
    let :局部作用变量
    为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:
    
    'use strict';
    
    function foo() {
        var sum = 0;
        for (let i=0; i<100; i++) {
            sum += i;
        }
        // SyntaxError:
        i += 1;
    }

    const:常量

    常量

    由于varlet申明的是变量,如果要申明一个常量,在ES6之前是不行的,我们通常用全部大写的变量来表示“这是一个常量,不要修改它的值”:

    var PI = 3.14;
    

    ES6标准引入了新的关键字const来定义常量,constlet都具有块级作用域:

    'use strict';
    
    const PI = 3.14;
    PI = 3; // 某些浏览器不报错,但是无效果!
    PI; // 3.14
    

     详细请参考:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344993159773a464f34e1724700a6d5dd9e235ceb7c000

  • 相关阅读:
    CUBA 使用 Spring 查询接口
    Java中的数据验证
    CUBA China 最新进展
    遇见CUBA CLI
    CUBA-Platform将全面助力中国开发者
    ES6 延展操作符
    ES6 解构赋值
    Service Worker
    dom元素上添加断点(使用dom breakpoint找到修改属性的javascript代码)
    svg foreignObject的作用(文本换行,生成图片)
  • 原文地址:https://www.cnblogs.com/donke/p/10015174.html
Copyright © 2011-2022 走看看