js基礎 全域性作用域

2022-10-08 20:18:22 字數 2535 閱讀 4992

作用域指乙個變數的作用的範圍

—-直接編寫在script標籤中的js**,都在全域性作用域。

全域性作用域在頁面開啟時建立,在頁面關閉時銷毀。

—-在全域性作用域中有乙個全域性物件window,我們可以直接使用,它代表的是乙個瀏覽器的視窗,它由瀏覽器建立,我們可以直接使用。

—-在全域性作用域中:

我們建立的變數都會作為window物件的屬性儲存

比如:

var a=10;

console.log(window.a);

我們建立的函式都會作為window物件的方法儲存

比如:

function fun()

window.fun();

window.alert('hello');

—-使用var 關鍵字宣告的變數,會在所有的**執行之前被宣告(但是不會賦值),但是如果宣告變數時不使用關鍵字var宣告,則變數不會被宣告提前。

使用var關鍵字宣告變數的**,下圖為使用var 關鍵字的原理

console.log(a);

var a=10;

如圖,使用var關鍵字時相當於在**執行前宣告了變數a,

輸出結果為undefined,但不會報錯。如圖:

不使用var關鍵字宣告變數的**,下圖為不使用var 關鍵字的原理:

console.log(a);

a=10;

如果不使用var關鍵字宣告就相當於不會有宣告提前,如下圖:

輸出結果會報錯,因為根本找不到這個變數,如下圖:

—-使用函式宣告形式建立的函式function fun (){}形式

它會在所有**執行前就被建立,和變數宣告提前一樣,所以我們可以在函式宣告前來呼叫函式。

—-使用表示式建立的函式var fun=function (){}形式

不會被宣告提前,所以不能在宣告前呼叫,因為根本沒有建立函式。

例項**:

fun1();

fun2();

function fun1()

var fun2=function ();

結果如下圖:

因為使用函式宣告方式會將函式宣告提前,而使用表示式宣告函式不會,畢竟是通過變數來接收的,而變數宣告提前並沒有賦值,而是執行到了變數賦值所在行才賦值的。

—-全域性作用域中的變數都是全域性變數

在頁面的任意部分都可以訪問到。

—-呼叫函式時建立函式作用域,函式執行完畢以後,函式作用域銷毀。

—-每呼叫一次函式就會建立乙個新的函式作用域,它們之間是互相獨立的。

—-在函式作用域中可以訪問到全域性作用域中的變數,在全域性作用域中無法訪問到函式作用域中的變數。

—-當在函式作用域中操作乙個變數時,他會先在自身(函式)作用域中尋找,如果有就直接使用,如果沒有就向上一級作用域中尋找,直到找到全域性作用域中為止,如果全域性作用域中依然沒有找到,則會報錯(referenceerror引用異常的錯誤)。

如下**就體現了就近原則:

var a=20;

function fun1()

fun2();

}fun1();

結果如下:

如果函式作用域中不存在次變數則向上一級查詢,例項**如下:

var a=20;

function fun1()

fun2();

}fun1();

最後在全域性作用域裡找到,結果如下:

—在巢狀的函式中如果要使用全域性作用域中的同名變數,而不是上一級的同名變數可以使用window物件的形式點出來。

var a=20;

function fun1()

fun2();

}fun1();

—-在函式作用域中也有宣告提前的特性。

使用var關鍵字宣告的變數,會在函式中所有的**執行之前被宣告。

函式中的函式也會被宣告提前,相當於函式作用域是乙個小的全域性作用域。

**結果如下圖:

因為變數宣告提前沒有賦值,所以為undefined

—-在函式作用域中不寫var 關鍵字宣告的變數會稱為全域性變數,因為如果找不到宣告該函式的關鍵字var(也就是這個變數沒有被宣告過)系統會預設為是給window物件宣告的屬性,所以會預設加上window.a,因為給它賦值了。

結果如下圖:

結果如下圖:

在函式括號裡定義形參就相當於在函式作用域中宣告了變數

JS(全域性作用域)

一 全域性函式作用域 把變數的宣告和函式的宣告放在前面 作用域 scope 一條資料可以在哪個範圍中使用。通常來說,一段程式 中所用到的資料並不總是有效 可用的,而限定這個資料的可用性的 範圍就是這個名字的作用域。作用域的使用提高了程式邏輯的區域性性,增強程式的可靠性,減少名字衝突。變數 資料 js...

JS (全域性作用域)

一 全域性函式作用域 把變數的宣告和函式的宣告放在前面 作用域 scope 一條資料可以在哪個範圍中使用。通常來說,一段程式 中所用到的資料並不總是有效 可用的,而限定這個資料的可用性的 範圍就是這個名字的作用域。作用域的使用提高了程式邏輯的區域性性,增強程式的可靠性,減少名字衝突。變數 資料 js...

Python作用域 全域性作用域 區域性作用域

在python中,每個函式都會建立乙個作用域。pythonistas也可能稱函式擁有它們自己的命名空間 namespace 這意味著當在函式體裡遇到變數名 時,python首先在該函式的命名空間中查詢,python包含了一些讓我們檢視命名空間的函式。讓我們寫乙個簡單的函式來探查一下local和glo...