JavaScript高階之prototype和Number
阿新 • • 發佈:2022-05-08
匿名函式也叫閉包函式,
什麼是閉包?閉包是可以有自由變數的程式碼塊;這些變數不在這個程式碼內或者全域性的其他地方定的,是在定義程式碼塊的環境中定義,也就是區域性變數。“閉包” 這個詞來源於以下兩者的結合:要執行的程式碼塊和為自由變數提供繫結的計算環境。由於自由變數被包含在程式碼塊中,這些自由變數以及它們引用的物件沒有被釋放。 其實我們可以通俗的說:子函式可以使用父函式中的區域性變數,這種行為就叫做閉包。理論上講,閉包和匿名函式是不同的概念,但是 PHP 將其視作相同的概念,提到閉包時,意思也就是就是匿名函式,講匿名函式,說的也就是閉包。
也就是說沒有函式名的函式。PHP 可以建立一個沒有名稱的函式,匿名函式大多會用在回撥函式中。
匿名函式可以直接把賦數賦值給變數,匿名函式仍然是函式,可以傳入引數,直接把賦數賦值給變數,呼叫變數即為呼叫函式。
建立一個匿名變數的語法結構如下:
1 2 3 |
function (引數列表) {
...
}
|
匿名函式和普通函式是非常相似的,它可以有返回值,也可以接受引數,不同的是匿名函式會在宣告時省略函式名。
示例如下:
1 2 3 4 5 6 |
<?php
$a = function (){
return '好好學習,天天向上' ;
};
echo $a ();
?>
|
通過上面的例項可以看出,匿名函式是當作變數的值來使用的,這時候PHP會自動把這種表示式轉換為內建類表示式,把一個closure賦值給一個變數的方式與普通的變數賦值語法是一樣的,在最後也要加上";"(分號)。
接下來,看兩種結合式的匿名函式
-
變數函式式的匿名函式
1 2 3 4 5 6 7 8 |
<?php
$a = function ( $b )
{
echo $b . '好好學習' ;
};
$a ( '福如東海' );
$a ( '壽比南山' );
?>
|
-
回撥式的匿名函式
在我們時實際使用中,時常將匿名函式當作函式或者方法的回撥使用,不止回撥函式,在很多的PHP內侄函式中都會用到匿名函式,示例程式碼如下:
1 2 3 4 5 6 7 8 |
<?php
$a = [1,2,3,4,5,6];
$b = array_map ( function ( $c ) {
return $c * $c ;
}, $a );
echo '<pre>' ;
print_r( $b );
?>
|