學JS的心路歷程 函式(二)arguments

2021-09-24 18:54:59 字數 1180 閱讀 3156

引數(argument)與函式引數(parameter)

在討論函式時,很多人都會把這兩個搞混,我自己也不例外。

雖然講錯別人也聽得懂,但是我們還是要搞清楚這兩個的定義到底是什麼!

引數是當我們呼叫函式時傳遞給它的值

引數是我們在函式定義中所列出的變數

看完還是有點不懂?沒關係,上圖!

宣告式(declaration)與表示式(expression)

發現在前幾天介紹宣告函式時沒有特別說明兩者名稱的差異,雖然這跟上面的引數與引數一樣說錯別人也懂(yjssqsdg),但我們還是要分清楚喔!

宣告式:

function funa()else if(arglength ===2) else if(typeof old ===「function」) else if(typeof old ===「function」){

return old(arguments);

可以看到我們每次呼叫時,都會先儲存原先的people.find到變數old,這時候就會造成閉包的現象(leleyuesao),這我們後面篇幅會提到,簡單的說,我們可以藉由people.find不斷往上找,直到找不到為止。

所以當我們呼叫people.find(「tom」)時,會執行:

if(fn.length === arguments.length){

return fn(arguments);

else if(typeof old ===「function」){

return old(arguments);

這時候的fn是findfullname但由於傳入引數長度跟findfullname長度不相等,所以會執行:

else if(typeof old ===「function」){

return old(arguments);

這時候的old等於people.find(「tom」),但是裡麵包附的fn已經換成,

findfirstname由於傳入引數長度跟findfirstname長度相等,便會直接執行,不會在往上找。

或許會有人認為,我為了寫乙個函式過載,還得寫這麼多複雜的函式,不如需要時在呼叫就好了啊!

但是函式過載的好處在於,只需要苦過一次,後面就可以用短短的一行函式就得到想要的結果了!

學JS的心路歷程 函式(三)this

this是什麼,取決於被呼叫的呼叫地點。昨天有提到說,呼叫函式時候會傳遞隱含引數 arguments和this並講解了arguments,今天我們就來 this吧!什麼是this 我們都會呼叫函式來使用,但有想過到底是從 呼叫到這個函式嗎?this通常被稱作函式背景空間 function conte...

學習JS的心路歷程 函式(一)

前幾天有間單提到該如何宣告函式及在hositing中會發生什麼事,但是函式的奧妙不僅於此。身為乙個使用js的工程師,我們一定要熟悉函式到比戀人還熟!這幾天將會把函式逐一扒開跟各位一起 其中的奧妙。函式是頭等物件 這句話代表著函式與任何js物件共存,也被當成乙個物件。函式可以被當成變數引用 用實值作宣...

python菜鳥心路歷程(二)

一直都很懶,也沒有新增什麼知識,清明假期前過來補幾個之前遇到的坑,以供參考。之前苦於pycharm anaconda中缺少自己使用的包,找不到乙個正確的安裝路徑,後來看其他文章找到了答案。解決方案就是在 我電腦的位址 d software anaconda anaconda3 lib site pa...