函式表示式

2021-10-06 07:06:50 字數 1805 閱讀 3171

定義函式的方式有兩種:一種是函式宣告,另一種是函式表示式

函式宣告語法格式如下:

function functionname(arg0,arg1,arg2)
關於函式宣告,有乙個重要的特徵就是函式宣告提公升,意思是在執行**之前會先讀取函式宣告

函式表示式語法格式如下:

var

functionname

=function(arg0,arg1,arg2)

遞迴函式是乙個函式通過名字呼叫自身情況構成的

經典的遞迴函式

function

factorial

(num)

else

} console.

log(

factorial(3

))

但是下列**會導致它出現問題

var anothe***ctial=factorial;

factorial=

null

;console.

log(

anothe***ctial(4

))

此時解決的方法有兩個

//方法一:

function

factorial

(num)

else

}//但是嚴格模式下不能通過指令碼訪問arguments.callee,故可以使用方法二更加保險

//方法二:

var factorial=

(function

f(num)

else

})

閉包是指有權訪問另乙個函式作用域的變數的函式,常見的建立閉包的常見方式,就是在乙個函式內部建立另有乙個函式

function

createcomparisionfunction

(propertyname)

else

if(value1>value2)

else

}}

閉包的執行過程:某個函式被呼叫時,會建立乙個執行環境及相應的作用鏈域。然後使用arguments和其他命名引數的值來初始化函式的活動物件,但在作用域中,外部函式活動物件始終處於第二位,外部函式的外部函式的活動物件處於第三位…知道作用鏈域終點的全域性執行環境。

下面來討論一下函式執行完畢後閉包域其他普通函式的不同之處

普通函式:區域性活動物件會被銷毀,記憶體中儲存全域性作用域

閉包:外部執行環境的作用鏈域會被銷毀,但是活動物件任然會留在記憶體,直到匿名函式被銷毀

閉包只能取得包含函式中任何變數的最後乙個值

閉包儲存著的是整個變數物件,而不是某個特殊的函式

function

createfunctions()

}return result

}var funcs =

createfunctions()

;for

(var i=

0; i < funcs.length; i++

)

但是,我們樂意建立另乙個匿名函式強制讓閉包的行為符合預期

在這裡插入**片

函式表示式

函式定義有以下兩種方式 一種是函式宣告,一種是函式表示式。函式宣告 在執行 之前會先讀取函式宣告,即函式宣告提公升。函式表示式 常用語法形式是常規的變數賦值語句,即建立乙個匿名函式並賦值給乙個變數。函式表示式在使用之前必須賦值,否則會出錯,這點與函式宣告提公升不同。能夠將匿名函式作為其他函式的值進行...

函式表示式

函式表示式在使用前必須先賦值。函式表示式,使用前必須先賦值var functionname function arg0,arg1 匿名函式或拉姆達函式 arguments.callee 是乙個指向正在執行的函式的指標,因此可以用它來實現對函式 的遞迴呼叫,function factorial num...

JS函式表示式

1.遞迴 function digui num else var d digui digui null d 3 改進 用arguments.callee num 1 代替 digui num 1 arguments.callee 是指向引數所在的函式的指標,code如下 function digui...