javascript - 讀js權(quán)威指南“作為值得函數(shù)”產(chǎn)生了疑惑,求釋疑
問(wèn)題描述
首先函數(shù)聲明和函數(shù)表達(dá)式理解的也不是很透徹,基本使用的都是函數(shù)聲明,也知道會(huì)前置這點(diǎn)。我印象中也不知道函數(shù)表達(dá)式有沒(méi)有函數(shù)名?因?yàn)橐矝](méi)怎么用過(guò)。今天看到了把函數(shù)賦給變量,發(fā)現(xiàn)和函數(shù)表達(dá)式似乎一樣,希望誰(shuí)能夠解答下,謝謝。
var s = function square (x){return x*x; } console.log(square(4)); console.log(s(4))
上面的問(wèn)題1,下面是問(wèn)題2,為什么上面的代碼報(bào)錯(cuò)“square is not defined”,而下面的代碼正常的輸出,是因?yàn)樯厦娴拇a屬于函數(shù)表達(dá)式,所以不支持square(4)是嗎?寫(xiě)到這兒突然想問(wèn),函數(shù)表達(dá)式就是在函數(shù)function前面同一行寫(xiě)上<var xx =>,而把函數(shù)賦給變量只是在函數(shù)聲明的基礎(chǔ)上,另起一行<var xx = 函數(shù)名>,是這樣么?求解,謝謝
function square (x){return x*x; } var s = square; console.log(square(4)); console.log(s(4))
問(wèn)題解答
回答1:關(guān)于問(wèn)題二,表達(dá)式,就是直接創(chuàng)建一個(gè)函數(shù)作變量,外部這個(gè)函數(shù)不存在。而函數(shù)賦予變量,則是先有函數(shù),再有變量。
于是有了問(wèn)題一的答案,s 本身是函數(shù),外部是不存在這個(gè)函數(shù)的,于是報(bào)錯(cuò)不存在。另外,應(yīng)該是寫(xiě)成:
var s = function() {.......}
兩個(gè)問(wèn)題同個(gè)答案。函數(shù)表達(dá)式的函數(shù)名是只讀的,只能在這個(gè)函數(shù)內(nèi)部引用,一般用作遞歸。
