跳到主要内容

區塊範圍

@serverSerrverlesskiy

範圍是程序的一部分,可以在其中使用變量。 創建時 .js 文件,我們創建整個文件的範圍並創建內部範圍,您必須使用花括號將其聲明 {...}.

file

// First scope
let fruit = 'Banana'
{
// Second scope
let fruit = 'Apple'
{
// Third scope
let fruit = 'Lime'
}
}

在此示例中,我們在不同範圍內創建了三個變量,它們具有各自的 fruit variable, 因此不會發生錯誤,但是如果您嘗試在同一作用域中創建兩個具有相同名稱的,則會發生錯誤🙅‍🙅️。

// First scope
let fruit = 'Banana'
{
// Second scope
let fruit = 'Apple'
let fruit = 'Lime' // An error will occur here
}

創建creating️各種結構時,您還需要為該結構創建範圍,因為您使用了花括號塊 {...}.

if (true) {
// Scope of the conditional operator
}

for (let i = 0; i > 5; i++) {
// Scope of the cycle
}

function test() {
// Function scope
}

在這些示例中,每個構造都有自己的範圍。

全球範圍

Global

當我們說全局範圍時,我們的意思是所有其他範圍都是該範圍的子級。 全局範圍包含在所有函數和塊之外聲明的變量。

// Global scope
let fruit = 'Banana'

在全局範圍內創建的變量稱為 global variable. 全局變量可以在所有子作用域中使用。

实时编辑器
结果
Loading...

當地範圍

Local

局部作用域包含在代碼specific的特定部分中聲明為的變量。 例如,在循環內創建的變量將是局部的。

for (let i = 0; i > 5; i++) {
// Variable i is local
}

局部變量only只能在聲明它們的塊內使用。

function learnJavaScript() {
function showFruit() {
// The variable fruit is local
let fruit = 'Banana'
}
// Therefore, we cannot use it outside the function.
return fruit
}

// ReferenceError: fruit is not defined

例子

Math

我們在不同的範圍內使用兩個具有相同名稱的變量。 otherFruit() 函數返回一個 fruit 來自變量的初始化範圍 Lime

实时编辑器
结果
Loading...

如果我們刪除 let 通過otherFruit()函數,然後不創建變量,而是將其覆蓋 .

实时编辑器
结果
Loading...

如果我們嘗試在父作用域中調用局部變量怎麼辦? 由於我們正在全局範圍內嘗試調用未創建的變量fact,因此發生了錯誤。

function learnJavaScript() {
let num
for (let i = 0; i != 5; i++) {
num += i
}
return i
}

//ReferenceError: i is not defined

Primer

Denying var

eye

在文章中 Change 我們告訴你,我們不會使用 var, 這與範圍有關。

  1. 如果在同一範圍內,則使用關鍵字創建兩個具有相同名稱的變量 let 或者 const, 解釋器會通過顯示錯誤來警告我們。
function learnJavaScript() {
let fruit = 'Banana'
let fruit = 'Lime'
return fruit
// SyntaxError: Identifier 'fruit' has already been declared
}

但是,如果您使用相同名稱創建變量 var, 它將重新分配它。

实时编辑器
结果
Loading...

錯誤不會發生,因為 var 覆蓋了變量 fruit

  1. 用創建了一個全局變量 var, 我們可以通過創建另一個具有相同名稱的變量from從本地範圍更改它 var. 範圍 var 僅限於功能或腳本。
实时编辑器
结果
Loading...
  1. 創建的變量 var 無論聲明位於何處,都應從腳本執行的一開始就將其視為已聲明。
实时编辑器
结果
Loading...
  1. JavaScript在ES6之前沒有塊作用域。 那些。 用創建的任何變量 var 塊內的關鍵字將在其外部可見。
if (true) {
var fruit = 'Apple' // the variable will be visible outside the given block
}
console.log(fruit) // "Apple"

javascript

if (true) {
let fruit = 'Apple' // the variable will not be visible outside the given block
}
console.log(fruit) // "Apple"

javascript

由於所列原因,開發人員決定不使用 var

問題?

問題

頻道輸入 Discord 付款後 Patreon.

問題:

問題

問題我們什麼時候創建第一個範圍?

1.創建循環時 2.創建文件時 3.創建塊時

創建條件語句時,是否創建了新作用域?

1.是的 2.沒有

局部變量在哪裡創建?

1.在代碼的特定部分 2.在所有塊之外

為了了解您學到了多少本課程,請對mobile application 我們學校就這個話題。

EnglishMoji!

鏈接

  1. JavaScript Scope
  2. Learn JavaScript
  3. MDN Web Docs

貢獻者 ✨

感謝這些好人(emoji key):


IIo3iTiv


Dmitriy Vasilev

💵

Resoner2005

🐛 🎨 🖋

Navernoss

🖋 🐛 🎨

EnglishMoji!