找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 18|回复: 0

函式(function)

[复制链接]

544

主题

55

回帖

2000

积分

管理员

积分
2000
发表于 2026-5-27 14:33:08 | 显示全部楼层 |阅读模式
作為 typeof 都要給上幾分面子的 function,果然還是有一篇獨立來介紹一下比較好。
儘管在前面的文章裡,我們早已散散落落的在各處提到它,用到它,討論它,函式就是一個這麼重要的角色。
這篇會盡量涵蓋前面提過的部分,順便當作一個複習確認一下這些特性都被記住了。
函式定義
函式是一個具可複用性的程式碼區塊,具對應的作用域,可以接受參數的傳入與回傳參數。
基礎的函式定義方式通過 function 關鍵字定義。
console.log(typeof foo);//"function"console.log(typeof foo.__proto__.__proto__)//"object"console.log(foo());//"bar"function foo(){       console.log('bar');}
這樣 foo 就是一個最基本的函式,儘管 typeof 會針對函式回傳 function,那是因為便於讓使用者針對函示做特別的處理,因為函式實在是太廣泛使用了。
實際上跟著原型鏈往上看,會發現一如前面說的除了原始型別,所有的複合型別都是物件,function 也不例外。
透過 () 便能夠執行函式。
函式會被提升到該作用域的頂端,即使語句順序上先使用後宣告也沒問題。
上面的例子也同時展示了這個特性。
有了提升,讓我們在多函式時無需特別費心處理函式宣告順序排放。
對變數賦值函式
除了上面的基本宣告方法,還有很多方式可以宣告函式,首先,既然函式是個物件,當然他也可以被作為 RHS 的賦值對象。
console.log(typeof a);//"undefined"try {console.log(typeof b);}catch (error) {console.log(`${error.name}: ${error.message}`);}//"ReferenceError: Cannot access 'b' before initialization"var a = function foo(){    console.log('bar');}let b = function foo2(){    console.log('bar2');}a();//"bar"b();//"bar2"
但透過這種方式創建的函式,提升行為變成宣告接受的變數容器一致,如果是 var 就是提升宣告,如果是 let 就是 TDZ。
匿名函式(Anonymous Function)與立即執行函式(IIFE)
函式不一定要有名稱,像上面我們定義了很多個由 foo 來命名的函式。
但我們可能會想要做一些運算,立即執行,為種理由使用 一次性的 函式,或是 函式名稱並不重要的函式(例如賦值給了變數,之後透過該變數呼叫而不是函式名稱)。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|联系我们

GMT+8, 2026-9-14 12:39 , Processed in 0.045122 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表