TS學習之變量聲明


1.Var 聲明變量

a)存在變量提升

(function(){
  var a = "1";
  var f = function(){};
  var b = "2";
  var c = "3";
})();

相當於:

(function(){
  var a,f,b,c;
  a = "1";
  f = function(){};
  b = "2";
  c = "3";
})();

b)聲明多個重復變量,后者覆蓋前者

var a = 10;
var a = 20;
var a = 30;
console.log(a)  //30

c)var聲明可以在包含它的函數,模塊,命名空間或全局作用域內部任何位置被訪問

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

    return x;
}

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

d)作用域問題

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;
}

console.log(sumMatrix([[1,2,3],[10,2,3]]))   //無論第二個數組怎么改變,結果始終為6

 e)怪異的變量獲取

for (var i = 0; i < 10; i++) {
    setTimeout(function() { console.log(i); }, 100 * i);
}
//期望輸出結果:0-9
//實際輸出結果:10個10

解決方式:

for (var i = 0; i < 10; i++) {
    (function(i) {
        setTimeout(function() { console.log(i); }, 100 * i);
    })(i);
}
for (let i = 0; i < 10; i++) {
    setTimeout(function() { console.log(i); }, 100 * i); }
 

2.let變量聲明

a)當用let聲明一個變量,它使用的是詞法作用域塊作用域,在包含它們的塊或for循環之外是不能訪問的。

function f(input: boolean) {
    let a = 100;

    if (input) {
        // Still okay to reference 'a'
        let b = a + 1;
        return b;
    }

    // Error: 'b' doesn't exist here
    return b;
}

b)不能在 let語句之前訪問它們

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

c)同時多次聲明同一個變量報錯

let x = 10;
let x = 20; // 錯誤,不能在1個作用域里多次聲明`x`

3.const變量聲明

與 let相同的作用域規則,但是不能對它們重新賦值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM