未定义变量: data_三、变量声明
生活随笔
收集整理的這篇文章主要介紹了
未定义变量: data_三、变量声明
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
三、變量聲明
var聲明
主要特點: - var是函數作用域,只針對函數聲明 - 可以多次聲明同一個變量不會報錯 - 捕獲變量怪異之處function fnVar(flag: boolean) {if(flag) {var x = 10;}return x; } fnVar(true); // 10 fnVar(false); // undefinedvar isDone: boolean = false; var isDone: boolean = true; // 打印結果:10,10,10,10... for(var i = 0; i < 10; i++){setTimeout(function() { console.log(i) }, 100 * i) }let聲明
能夠解決var聲明產生的問題,主要特點: - 使用詞法作用域或者塊作用域 - 他們不能在被聲明之前讀或者寫,雖然變量存在于他們的作用域里,但是直到聲明他的代碼之前的區域都屬于 ”暫時性死區“ - 不允許在同一作用域中同時定義兩個相同的變量function fnLet(input: boolean){let a = 100;if(input){let b = a + 1;return b;}// 此處會報錯b未定義return b; } a++; // 會報錯 let a; // 下面這種方式ts是允許的 function letFoo() {return forward; } letFoo(); let forward;塊級作用域變量的獲取: - var聲明變量時,每次進入一個作用域時,他創建了一個變量的環境,就算作用域內代碼已經執行完畢,這個環境與其捕獲的變量依然存在(所以在循環setTimeout中使用自執行函數的目的就是重新創建一個新的變量環境) - let會在每一個作用域中都聲明一個新的變量環境(所以針對循環setTimeout中把var換成let聲明時就可以達到理想的輸出效果)// 塊級作用域變量的獲取: var function citySleeps() {let getCity;if(true) {let city = 'Seattle';getCity = function() {return city;}}// 已經在city環境里獲取到了city,所以就算if語句執行結束仍然可以訪問return getCity(); } // 塊級作用域變量的獲取:let // 打印結果:1,2,3,4,5... for(let i = 0; i < 10; i++){setTimeout(function() { console.log(i) }, 100 * i) }const聲明
定義:被賦值以后不能被改變 特點: - 擁有與let相同的作用域規則 - const定義一些常量場景多一些const data = 123; data = 444; // error解構
// 數組解構 let input = [1, 2]; let [first, second] = input; // 作用于函數參數 function fnInput([first, second]: [number, number]){return first + second; } let result = fnInput([first, second]); // 在數組中使用...語法創建剩余變量 let [fist, ...rest] = [1,2,3,4]; // 對象解構 let objInput = {a: 'foo',b: 12,c: false } let { a, b } = objInput; // 用...語法創建剩余變量 let { c, ...others } = objInput; let total = others.a + others.b; // 屬性重命名 let { a: newName1, b: newName2 } = objInput; console.log(newName1); // 指定類型 let { a: objA, b: objB }: { a: string, b: number } = objInput; // 設置默認值 function keepObject(obj: { a: string, b?: number }){let { a, b = 1001 } = obj; }總結
以上是生活随笔為你收集整理的未定义变量: data_三、变量声明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java quartz2.1_quart
- 下一篇: 湖南hp服务器虚拟化解决方案,HP刀片服