第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

php中的閉包函數(shù)和匿名函數(shù)有區(qū)別嗎,何謂閉包?

php中的閉包函數(shù)和匿名函數(shù)有區(qū)別嗎,何謂閉包?

森林海 2018-08-07 10:09:08
閉包到底是什么???之前js里面聽過一些,但是實(shí)際開發(fā)怎么感覺沒怎么用到過這個(gè)概念?只是最近在學(xué)laraval的時(shí)候發(fā)現(xiàn)路由配置都是用閉包函數(shù)(教程里面這樣說的),不懂這個(gè)閉包是什么意思?我看代碼和js里面的匿名函數(shù)很像啊?感謝各位回答?﹏?
查看完整描述

1 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

廣義上來說,匿名函數(shù)就是沒有名字的函數(shù),而閉包則是可以感知環(huán)境的函數(shù),注意,這里指的環(huán)境是定義函數(shù)時(shí)的環(huán)境。

不太同意 @有明 的答案中JS部分的說法,在JS里,閉包不一定是匿名函數(shù),MDN的文檔中指出:

閉包是指那些能夠訪問獨(dú)立(自由)變量的函數(shù) (變量在本地使用,但定義在一個(gè)封閉的作用域中)。換句話說,這些函數(shù)可以“記憶”它被創(chuàng)建時(shí)候的環(huán)境。

從文檔中舉的第一個(gè)例子:

function init() {  var name = "Mozilla"; // name是被init創(chuàng)建的局部變量
  function displayName() { // displayName()是一個(gè)內(nèi)部函數(shù),
    alert(name); // 它是一個(gè)使用在父函數(shù)中聲明的變量的閉包
  } 
  displayName();
}
init();

可以看到,displayName()是有名字的,但也是一個(gè)閉包。

回到PHP上來,從官方文檔中可以看出,在PHP中閉包和匿名函數(shù)可以視為等同的:

匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許 臨時(shí)創(chuàng)建一個(gè)沒有指定名稱的函數(shù)。

按照Symfony主要作者Fabien Potencier在這篇文章On PHP 5.3, Lambda Functions, and Closures中的說法,PHP中匿名函數(shù)和閉包是有區(qū)別的:

To sum up, a lambda function is an anonymous PHP function that can be stored in a variable and passed as an argument to other functions or methods. A closure is a lambda function that is aware of its surrounding context.

我的結(jié)論是:理論上匿名函數(shù)和閉包是不一樣的概念,在PHP中這兩者概念與其他語言(比如JavaScript)是不一樣的,這兩者在使用上可以視為等同的。

至于問題中的關(guān)于什么時(shí)候使用的疑問,F(xiàn)abien Potencier的文章中有詳細(xì)的例子,建議仔細(xì)閱讀。

參考:


查看完整回答
反對 回復(fù) 2018-09-17
  • 1 回答
  • 0 關(guān)注
  • 973 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號