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