函式作用域

2022-06-30 17:06:12 字數 1186 閱讀 7682

在ecmascript 5 的規範中,作用域只有兩種,一種是『全域性作用域』,一種是函式作用域

對於乙個最外層函式來說,在函式體外部宣告的變數就是『全域性變數』,可以在函式內部進行呼叫;

var a = "world"

function s()

//輸出 「hello world」

以上demo我在函式外部宣告了乙個變數a並對其進行了賦值,在函式內部函式也呼叫到了全域性屬性 a的值。

function text()

console.log(a)

//a is not defined 結果出現了報錯

我在函式內部宣告了乙個變數a,並且在函式外面對變數a進行了呼叫,結果出現了報錯

函式內部宣告的變數會覆蓋函式外面全域性屬性變數,類似於css樣式覆蓋中的特性,作用作用域越小,變數的覆蓋性越高。

demo:

var a = "你怎麼,穿著品如的衣服?"

function text()

text();//你是說我騷麼?

console.log(a)//你怎麼,穿著品如的衣服?

在上面的demo中我在函式外面宣告了乙個變數,同時在函式裡面宣告了乙個變數,結果呼叫函式的結果出來的是函式裡面的變數,而在函式外面呼叫了乙個變數結果是呼叫了全域性變數。所以函式外面的變數與函式裡面的變數發生衝突時,函式作用域大於全域性作用域,可見函式作用域只作用於函式本身,出了函式體,變數又會恢復過來。

函式內部的變數提公升

與全域性作用域一樣,函式內部的變數也會產生『變數提公升』現象,特性和全域性變數一樣,只不過函式內部的區域性變數提公升的是到當前函式體的最上方,而全域性變數提公升到當前**塊的最上方。

function text()

text()//輸出的為 我喜歡品如undefined和我喜歡品品如,因為她夠騷。

以上**把變數b提公升到了**塊最前方,所以呼叫函式的時候輸出的時undefind而不是 b is not defined,上面**可以理解為以下**;

demo:

function text()
var a = 1

var b =function()

function f()

f()//輸出函式結果仍是1

函式作用域

有巢狀函式的時候有return x的返回函式x的位址,沒有的則為none def f1 n1 f1 print f1中 n1 def f2 n2 f2 def f3 n3 f3 print f3中 n3 print f2中 n2 return f3 return f2 r1 f1 print r1 ...

函式作用域

匿名函式,lambda def f o if o 7 print o print list filter lambda o o 8,4,77 22,4 8 list filter f,4,77,22,4,8 列印的話會返回none 77,22 7722 8a 5deff global a 要用全域性...

函式作用域

函式作用域 呼叫函式時建立函式作用域,函式執行完畢以後,函式作用域銷毀 每呼叫一次,函式就會建立乙個新的函式作用域,它們之間是互相獨立的 在函式作用域中,可以訪問到全域性作用域的變數 在全域性作用域中無法訪問到函式作用域的變數 具體示例 當在函式作用域操作乙個變數時,它會先在自身作用域中尋找,如果有...