關(guān)鍵詞:全局變量芯侥、局部變量、變量提升機(jī)制乳讥、內(nèi)存回收機(jī)制柱查、作用域、作用域鏈
變量(作用域)
局部變量可以與全局變量重名云石,但是局部變量會(huì)屏蔽全局變量唉工。要使用全局變量,需要使用
全局變量 | 局部變量 | |
---|---|---|
作用域 | 整個(gè)程序 | 當(dāng)前函數(shù)或循環(huán)等 |
生命周期 | 瀏覽器卸載頁(yè)面才會(huì)結(jié)束 | 函數(shù)的執(zhí)行過(guò)程中存在 |
閉包
- 概念:定義在一個(gè)函數(shù)內(nèi)部的函數(shù)汹忠,讀取內(nèi)部變量酵紫。
- 用途:
- 是前面提到的可以讀取函數(shù)內(nèi)部的變量告嘲,
- 讓這些變量的值始終保持在內(nèi)存中错维。(合理利用奖地,減少瀏覽器開銷)
變量提升機(jī)制
- 當(dāng)使用var定義變量,定義名稱會(huì)提升到作用域頂部
console.log(varTest);//undefined
var varTest = 123;
console.log(letTest);//letTest is not defined
let letTest = 456;
內(nèi)存回收機(jī)制
垃圾收集器會(huì)定期(周期性)找出那些不在繼續(xù)使用的變量,然后釋放其內(nèi)存赋焕。
思考題
- b沒有使用var参歹,所以是定義一個(gè)全局的變量,注意嚴(yán)格模式b會(huì)報(bào)not defined
function fn() {
var a = b = 123;
console.log(a);
console.log(b);
}
fn();
console.log('outside: ' + a);//=>a is not defined
console.log('outside: ' + b);//=>outside: 123
- 作用域隆判,內(nèi)部沒有定義犬庇,變量會(huì)往上尋找
var num = 123;
function fn() {
console.log(num)//=>123
}
- 作用域,就近原則
function fn() {
console.log(num)//=>undefined
var num = 456;
}
參考資料
這個(gè)系列文章是我收納侨嘀、歸納臭挽、回顧前端基礎(chǔ)知識(shí)。供自我與有需要的人咬腕,共同進(jìn)步欢峰。感謝前人的分享,如有錯(cuò)處涨共,請(qǐng)多提點(diǎn)