TypeScript基础学习 —— 变量声明

var、let、constjavascript

  1、varjava

    一、声明函数

      一直以来咱们都是经过var关键字定义JavaScript变量。spa

var a = 10;

        咱们能够在其余函数内部访问相同的变量code

function f() {
    var a = 10;
    return function g() {
        var b = a + 1;
        return b;
    }
}
var g = f();
g(); // returns 11;

      g能够获取到f函数里定义的a变量。 每当g被调用时,它均可以访问到f里的a变量。 即便当gf已经执行完后才被调用,它仍然能够访问及修改a。blog

function f() {
    var a = 1;
    a = 2;
    var b = g();
    a = 3;
    return b;

    function g() {
        return a;
    }
}
f(); // returns 2

    二、做用域规则ip

      对于熟悉其它语言的人来讲,var声明有些奇怪的做用域规则。作用域

function f(shouldInitialize: boolean) {
    if (shouldInitialize) {
        var x = 10;
    }
    return x;
}

f(true);  // returns '10'
f(false); // returns 'undefined'

      变量x是定义在if语句里面,可是咱们却能够在语句的外面访问它。 这是由于var声明能够在包含它的函数,模块,命名空间或全局做用域内部任何位置被访问(咱们后面会详细介绍),包含它的代码块对此没有什么影响。 有些人称此为var做用域函数做用域。 函数参数也使用函数做用域。开发

      这些做用域规则可能会引起一些错误。 其中之一就是,屡次声明同一个变量并不会报错:it

function sumMatrix(matrix: number[][]) {
    var sum = 0;
    for (var i = 0; i < matrix.length; i++) {
        var currentRow = matrix[i];
        for (var i = 0; i < currentRow.length; i++) {
            sum += currentRow[i];
        }
    }
    return sum;
}

      这里很容易看出一些问题,里层的for循环会覆盖变量i,由于全部i都引用相同的函数做用域内的变量。 有经验的开发者们很清楚,这些问题可能在代码审查时漏掉,引起无穷的麻烦。

  

  2、let

      let

 

let hello = "Hello!";

 

    一、块做用域

      let声明一个变量,它使用的是 词法做用域块做用域。不一样于使用 var 声明的变量那样能够在包含它们的函数外访问,块做用域变量在包含它们的函数外访问,块做用域变量在包含它们的块或者for循环以外是不能访问的。

 

a++; // illegal to use 'a' before it's declared;
let a;

 

    二、重定义及屏蔽

      使用var声明时,它不在意你声明多少次;你只会获得1个。

 

function f(x) {
    var x;
    var x;
    if (true) {
        var x;
    }
}

 

      let声明就不会这么宽松

 

 

let x = 10;
let x = 20; // 错误,不能在1个做用域里屡次声明`x`

 

function f(x) {
    let x = 100; // error: interferes with parameter declaration
}

function g() {
    let x = 100;
    var x = 100; // error: can't have both declarations of 'x'
}

 

  3、const

    一、声明    

      它们与let声明类似,可是就像它的名字所表达的,它们被赋值后不能再改变。 换句话说,它们拥有与let相同的做用域规则,可是不能对它们从新赋值。

相关文章
相关标签/搜索