函式本身的作用域

2021-09-24 01:35:50 字數 966 閱讀 6065

函式本身也是乙個值,也有自己的作用域。它的作用域與變數一樣,就是其宣告時所在的作用域,與其執行時所在作用域無關。

var a = 1

var x = function()

function f()

f()

上面**中,函式x是在函式f的外部宣告的,所以它的作用域繫結外層,內部變數a不會到函式f體內取值,所以輸出1,而不是2。

總之,函式執行時所在的作用域,是定義時的作用域,而不是呼叫時所在的作用域

var x = function () ;

function y(f)

y(x)

// referenceerror: a is not defined

上面**將函式x作為引數,傳入函式y。但是x是在函式y體外宣告的,作用域繫結外層,因此找不到函式y的內部變數a,導致報錯。

同樣的函式本內部宣告的函式,作用域繫結在函式體內部

function foo() 

return bar

}var x = 2

var f = foo()

f() // 1

箭頭函式的作用域,是和父級上下文繫結在一起的

var obj = 

}obj.show() // undefined

上面**show函式是乙個箭頭函式,其this指向父級,而父級是乙個頂級物件,window,window.id沒有定義,所以返回undefined

var obj = 	}}

obj.show()() // 2

上面**中,箭頭函式定義在show函式內部,其父級作用域為show函式的作用域,show函式中this指向呼叫show函式的物件,即obj,obj中有id屬性,且值為2,所以輸出2

轉換函式本身

乙個新的程式設計師經常問的是大問題,當乙個成員函式被呼叫,如何知道它被稱為c 的物件?答案是c 採用隱式指標命名為 本 讓我們看一看 這 的更多細節。以下是乙個簡單的類,有乙個整數和提供乙個建構函式和訪問功能。注意,不需要析構函式是因為c 可以清理我們的整數。class void setid int...

函式的作用域

一,每乙個變數都是有作用域的。1,首先講一下 塊與作用域 for,if等語句還有 function,他們都有乙個特點,就是後面有一對 比如 for var i 0 i items.length i 之間有 if some express 之間有 function param1 之間有 所有 包起來的...

函式的作用域

在php中,函式的作用域來控制函式及函式中的變數在 是可見並且可用的。不同的程式語言有不同的變數作用域規則,php中的函式及函式中的變數作用域規則如下 函式的作用域是指在函式內部宣告的變數作用域是從宣告的那條語句開始到函式的末尾 全域性作用域是指在函式外部宣告的變數作用域是從那條語句開始到宣告所在的...