未定义变量: data_三、变量声明
生活随笔
收集整理的這篇文章主要介紹了
未定义变量: data_三、变量声明
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
三、變量聲明
var聲明
主要特點: - var是函數(shù)作用域,只針對函數(shù)聲明 - 可以多次聲明同一個變量不會報錯 - 捕獲變量怪異之處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聲明產(chǎn)生的問題,主要特點: - 使用詞法作用域或者塊作用域 - 他們不能在被聲明之前讀或者寫,雖然變量存在于他們的作用域里,但是直到聲明他的代碼之前的區(qū)域都屬于 ”暫時性死區(qū)“ - 不允許在同一作用域中同時定義兩個相同的變量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聲明變量時,每次進入一個作用域時,他創(chuàng)建了一個變量的環(huán)境,就算作用域內代碼已經(jīng)執(zhí)行完畢,這個環(huán)境與其捕獲的變量依然存在(所以在循環(huán)setTimeout中使用自執(zhí)行函數(shù)的目的就是重新創(chuàng)建一個新的變量環(huán)境) - let會在每一個作用域中都聲明一個新的變量環(huán)境(所以針對循環(huán)setTimeout中把var換成let聲明時就可以達到理想的輸出效果)// 塊級作用域變量的獲取: var function citySleeps() {let getCity;if(true) {let city = 'Seattle';getCity = function() {return city;}}// 已經(jīng)在city環(huán)境里獲取到了city,所以就算if語句執(zhí)行結束仍然可以訪問return getCity(); } // 塊級作用域變量的獲取:let // 打印結果:1,2,3,4,5... for(let i = 0; i < 10; i++){setTimeout(function() { console.log(i) }, 100 * i) }const聲明
定義:被賦值以后不能被改變 特點: - 擁有與let相同的作用域規(guī)則 - const定義一些常量場景多一些const data = 123; data = 444; // error解構
// 數(shù)組解構 let input = [1, 2]; let [first, second] = input; // 作用于函數(shù)參數(shù) function fnInput([first, second]: [number, number]){return first + second; } let result = fnInput([first, second]); // 在數(shù)組中使用...語法創(chuàng)建剩余變量 let [fist, ...rest] = [1,2,3,4]; // 對象解構 let objInput = {a: 'foo',b: 12,c: false } let { a, b } = objInput; // 用...語法創(chuàng)建剩余變量 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刀片服