塊級作用域

塊級作用域

作用域

含義

a. 作用域被用來描述在某個代碼塊可見的所有實體(或有效的所有標(biāo)識符),更精準(zhǔn)一點,叫做上下文。是你的代碼在運(yùn)行時,各個變量、函數(shù)和對象的可訪問性。換句話說,作用域決定了你的代碼里的變量和其他資源在各個區(qū)域中的可見性。(上下文和作用域也有區(qū)別

b. 任何一對花括號中的語句集都屬于一個塊,在這之中定義的所有變量在代碼塊外都是不可見的

c. 當(dāng)變量定義在一個函數(shù)中時,變量就在局部作用域中,而定義在函數(shù)之外的變量則從屬于全局作用域。每個函數(shù)在調(diào)用的時候會創(chuàng)建一個新的作用域。

作用

a. 最小訪問原則

b. 為你的代碼提供了一個安全層級。計算機(jī)安全中,有個常規(guī)的原則是:用戶只能訪問他們當(dāng)前需要的東西。

c. 函數(shù)體內(nèi)部,局部變量的優(yōu)先級比同名的全局變量高

塊語句

  • 它們不會創(chuàng)建新的作用域。在塊級聲明中定義的變量從屬于該塊所在的作用域。包括但不限于以下(if,switch,for,while等。

1. var

  • 通過var聲明的變量沒有塊級作用域
var x = 1;
{
var x = 2;
}
console.log(x); // 輸出 2

2. let

  • 其聲明的變量是有塊級作用域的
let x = 1;
{
let x = 2;
}
console.log(x); // 輸出 1
  • x = 2被限制在塊級作用域中, 也就是它被聲明時所在的塊級作用域。
  • let聲明的變量在塊級作用域內(nèi)能強(qiáng)制執(zhí)行更新變量
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {console.log(i);};
}
a[0]();                // 10
a[1]();                // 10
a[6]();                // 10
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {console.log(i);};
}
a[0]();                // 0
a[1]();                // 1
a[6]();                // 6

3.const

  • 其聲明的變量是有塊級作用域的
const c = 1;
{
const c = 2;
}
console.log(c); // 輸出1, 而且不會報錯
  • note:注意塊級作用域里的常量聲明const c = 2 并不會拋出SyntaxError: Identifier 'c' has already been declared這樣的語法錯誤,因為這是一個新的作用域。

4.function

foo('outside');  // TypeError: foo is not a function
{
function foo(location) {
console.log('foo is called ' + location);
}
foo('inside'); // 正常工作并且打印 'foo is called inside' 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容