js中的作用域和作用域

2021-10-02 18:57:50 字數 2272 閱讀 5050

作用域是在執行時**中的某些特定部分中變數,函式和物件的可訪問性 。簡單的說就好似變數能起到作用的範圍

區域性作用域(也可以叫做函式作用域)

一般只在固定的**片段內可訪問到,最常見的例如函式內部

如下:在我們在函式中用var關鍵字宣告乙個 變數 a 在函式外輸出a的值

function scope() 

console.log(a); //報錯 (變數a未宣告)

scope();

//這裡的a只能在函式scope中訪問 所以a 擁有函式作用域

在函式scope中宣告的變數只能在函式scope中訪問 不可以在別的函式下訪問

如下:

function scope1()

scope1();

函式作用域中的函式作用域

function scope() 

scope1();

console.log(b); //報錯 (變數b未宣告) }

console.log(a); //報錯 (變數a未宣告)

scope();

總結:函式作用域 在行數a中宣告也可以在函式a中訪問也可以在函式a裡面的函式使用

全域性作用域 :在**中任何地方都是訪問到的變數擁有全域性作用域

說到全域性作用域在js中有個全域性變數

全域性變數也就是擁有全域性作用域的變數

所有末定義直接賦值的變數自動宣告為擁有全域性作用域

我們在函式中定義乙個全域性變數

下面我們來用例項展示:

function scope()

function scope1()

console.log(a); //輸出10

scope1();

上面例項的a就是 沒有宣告 直接賦值 所以他是全域性變數 可以在函式scope() 中訪問也可以在函式scope1() 中訪問可以在函式外訪問

其實同過全域性變數我們就可以基本理解全域性作用是的什麼呢

全域性作用域就是可以在函式a中訪問也可以在函式b中訪問也可在函式外訪問

簡單是說全域性作用就是可以在任何地方訪問

全域性作用域的弊端:

如果我們寫了很多行 js **,變數定義都沒有用函式包括,那麼它們就全部都在全域性作用域中。這樣就會 汙染全域性命名空間, 容易引起命名衝突。

什麼是作用域鏈

如果要訪問a的值現在自己的活動範圍找如果早不到就找父級找 ,如果父級也沒呢?再一層一層向上尋找,直到找到全域性作用域還是沒找到,就宣布放棄。這種一層一層的關係,就是 作用域鏈 。

如下**:

var a = 10;

function scope()

scope2()

}scope1();

console.log(b);

} scope() ;

為了很好的理解我們先出從裡面的函式看起

function scope2()

scope2()

這裡要輸出a但是 scope2()中沒有宣告 a 那麼就要去他的父級scope1()裡面找 但是我們發現 scope1() 裡面也沒有 所以我們還要去 scope1()的父級 scope() 找 可以還沒有找到 只能在全域性作用域中找 找到了 var a = 10; 所以我們這裡輸出10

再看 scope1() 忽略掉 scope2()如下

unction scope1()
這裡要輸出b但是 scope1()中沒有宣告 b 那麼就要去他的父級scope()裡面找 我們發現 scope()中宣告了並賦值 var b = 20;所以我們這裡輸出20

在看 scope()

function scope()
這裡要輸出b但是 scope()中有宣告 b 並賦值 var b = 20;所以我們這裡輸出20

我們把上面的這個例項畫乙個圖

紅色的箭頭是鏈結的就是作用域鏈 表示 scope2 可以訪問 scop1 和scop 以及全域性作用域

scope1 可以訪問 scop 以及全域性作用域

scop 可以訪問 全域性作用域

通過以上作用域和這個例項我們可以總結出:

作用域是分層的,內層作用域可以訪問外層作用域的變數,反之則不行

JS作用域和作用域鏈

什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...

js 函式中的作用域和作用域鏈

js看似有 塊級作用域 其實它沒有,取而代之的是 函式作用域 在乙個 塊 一對花括號內 定義的變數在 塊外部是不可見的,且在 塊執行結束後被釋放掉。定義在該函式中的引數和變數在函式外部不可見 例子1 而乙個函式內部任何位置定義的變數,在該函式內部任何地方都可見 例子2 解釋二 也就是說,變數不僅在宣...

Js 函式作用域和塊作用域

你不知道的js 第二版上捲第三章筆記 全域性作用域 定義在函式外部的變數,函式內部可以呼叫 區域性作用域 定義在函式內部的變數,函式外部不可以呼叫 塊級作用域 如同下面這個例子 for var i 1 i 10 i console.log i,b 輸出的還是 10 100!說明js沒有塊級作用域當我...