function 函式宣告頭的提公升和預解析

2022-02-16 02:27:28 字數 1982 閱讀 6549

即function語句的集合,就是將多個語句封裝到一起;

函式的執行要會自己遍歷,遇見函式 a();執行語句,就要移交控制權,函式執行完畢之後,控制權又移交回來了!

函式的引數要羅列在function定義的圓括號內sum(a,b),用逗號隔開,叫做形式引數,呼叫的時候,圓括號裡面是實際引數sum(1,2),引數在js中不用指定型別,呼叫的時候引數個數也可以和定義的時候不一樣。

1        //

函式的引數和返回值

2 function

sum(a,b)

67 //

矮化為表示式了

console.log(sum(1,2));

函式宣告頭的提公升,程式一開始就會有乙個預解析的過程,程式會通看全部**,把所有的函式名字都放到開頭預習一下,程式自己知道了,頁面上有這個函式定義。但是,

函式表示式是不能預解析的

。敲黑板!!!

函式表示式:如var a = function(); 。

function沒有名字,只是個匿名函式,a不是函式的名字,變數a是匿名函式的乙個引用而已!!!

//

函式宣告頭的提公升

a1();

a2();

function

a1()

//函式表示式是不能預解析的

var a2 = function

()

a1()會正常彈窗!

a2()會報錯;函式表示式是不能被預解析的(劃重點要考)

如果同乙個識別符號,在程式中又是變數的名字,又是函式的名字,解析器會把識別符號給函式。

a();

var a=1;

function

a()

在a();之前函式已經把function a();預解析了。a就是函式了,雖然變數a也有乙個變數宣告頭的提公升,但是幹不過函式宣告頭的提公升,所以a()就會執行函式;

var a=1;

function

a() a();

1.在執行var a = 1之前,函式已經把

function a()

預解析了,程式就已經知道頁面上有乙個函式叫做a。

2.但是開始執行程式之後,定義了乙個變數

a,所以識別符號

a,就又變成變數了。

3.遇見

function

定義,程式會無視,因為已經預解析了。直到

a()執行的時候,

a就是變數,無法執行,報錯。

上面三點可能有點繞,需要慢慢理解,仔細琢磨!

var a=1;

var a= function

() a();

有沒有想過,這種寫法竟然可以被執行,?????

因為上文提到函式表示式 var a= function() 是不會被預解析的,程式剛執行時a是乙個變數,後來又遇見乙個函式的引用a;所以最後這個識別符號a就是函式;

a();

var a=1;

var a= function

()

console.log(a);

var a=1;

var a= function

()

函式表示式是不會預解析的,所以預解析的就是變數a的定義,就是

undefined

,undefined

是無法執行的。

Function函式的宣告方式

函式是一段可以反覆利用的 通過變數,把函式儲存到變數容器裡 var a function 因為沒有名字也被稱為匿名函式 後續需要呼叫 塊可直接使用變數名 a 直接宣告函式,function a 呼叫 塊方法 a 在函式內部呼叫自身的宣告方式。var a function text 建構函式var a...

函式宣告之function與var

紙上得來終覺淺,絕知此事要躬行。軟體這行業,很多東西還是要靠敲 敲出來的,你以為看書看的很通透,例子也能做出來的東西,一需要深入混合運用頓時覺得懵逼了。關鍵還是在於一知半解,不夠深入。今天我就總結一下近段時間遇到並糾結過的一些知識。老規矩,由淺入深,用發散性思維思考每個知識點。一 宣告乙個函式 fu...

函式表示式 和函式宣告function的區別

表示立即執行乙個函式表示式,拆分來看第乙個括號裡的是乙個函式宣告,第二個括號表示立即執行這個表示式,下面我們來理解一下什麼是函式表示式和函式宣告。區分函式表示式和函式宣告的區別在於function的位置,如果function不是出現在一段函式的第乙個詞,那麼這是乙個函式表示式,若function是第...