JS 函數的定義與調用


文章目錄

    • 1. 普通函數-無形參
    • 2. 普通函數-有形參
    • 3. 普通函數-參數默認值
    • 4. 普通函數-返回值
    • 5. 立即執行函數
    • 6. 匿名函數
    • 7. 箭頭函數
    • 8. 函數提升

1. 普通函數-無形參

函數定義時沒有指定形參, 調用時仍然可以向其傳遞參數, 通過默認參數 arguments 獲取, arguments 是一個偽數組, 用來獲取實參列表

<script>// 定義函數-無形參function func() {// 將 偽數組 arguments 轉為真數組let paramArray = [].slice.call(arguments)if (paramArray.length > 0) {console.dir('有參調用, 參數列表 ' + [].slice.call(arguments).toString())} else {console.log('無參調用')}}func() // 無參調用func('a', 'b') // 有參調用
</script>

2. 普通函數-有形參

  • 即使函數定義時指定了形參, 調用時仍然可以不傳實參
  • 實參和形參的個數可以不符, 但是形參的順序是不能改變的
<script>// 定義函數-有形參-有返回值function func(param1, param2) {if (!param1 && !param2) {console.log('參數未傳')} else {console.log('參數1: ' + param1 + ' 參數2: ' + param2)}}func() // 無參調用func('a', 'b') // 有參調用func('a') // 形參和實參個數不符
</script>

3. 普通函數-參數默認值

<script>// 定義函數-有形參-有返回值function func(param1, param2 = '默認值') {console.log('參數1: ' + param1 + ' 參數2: ' + param2)}func('a', 'b') // 參數1: a 參數2: bfunc('a') // 參數1: a 參數2: 默認值
</script>

4. 普通函數-返回值

未顯式指定返回值時, 函數默認返回 undefined

<script>// 顯式指定返回值function result() {return '返回值'}console.log(result()) // 返回值// 函數默認返回值function noResult() {}console.log(noResult()) // undefined
</script>

5. 立即執行函數

  • 程序一運行就會被執行, 不需要調用
  • 如果立即執行函數前有其他代碼,那么它的前一行代碼, 不能省略 ;
<script>// 語法 1:( 函數定義 )()let fn;(fn = function run() {console.log('這是立即執行函數')})()// fn() 可反復調用console.log('如果立即執行函數前有其他代碼,那么它的前一行代碼, 不能省略 ; 號');// 語法 2:( 函數定義() )(function run() {console.log('這是立即執行函數')}())
</script>

6. 匿名函數

常用場景: 函數表達式、回調函數、立即執行函數等。

<script>// 場景 1:函數表達式const caller = function () {console.log('匿名函數')}caller()// 場景 2:回調函數function run(callback) {callback();}run(function () {console.log('匿名函數')});// 場景 3:立即執行函數(function () {console.log('匿名函數')})()
</script>

7. 箭頭函數

  • 箭頭函數是匿名函數的語法糖
  • 不是所有匿名函數場景都適合用箭頭函數替換, 比如箭頭函數就沒有其他函數的默認參數 arguments
  • this 的指向由箭頭函數聲明的地方決定

匿名函數和箭頭函數語法對比

<script>// 1. 無參的對比const fn1 = function () {}const fn1 = () => {}// 2. 單參的對比const fn2 = function (a) {}const fn2 = a => {} // 單個參數時, 箭頭函數的參數列表可以省略小括號 ()// 3. 多參的對比const fn3 = function (a, b) { }const fn3 = (a, b) => {}// 4. 函數體只有一行代碼的對比const fn4 = function () {return '返回值'}const fn4 = () => '返回值' // 函數體只有一行代碼時, 箭頭函數的函數體可以省略大括號 {}// 函數體只有一行代碼并且返回的是對象時, 要在函數體外加上 ({})const fn4 = () => ({ name: '3s', age: 27 })// 5. 函數體多行代碼對比const fn5 = function () {let str = '返回值'return str}const fn5 = () => {let str = '返回值'return str}
</script>

8. 函數提升

  • JS 引擎在預解析時, 會把函數聲明部分提升至函數調用之前。所以 JS 編寫時就算函數先調用后定義, 也可以正常運行
  • 函數表達式不會進行函數提升
<script>// 先調用func();// 后定義function func() {console.log('函數聲明會被提升到函數調用之前')}/*JS 引擎預編譯后, 會變成類似這段代碼function func(){console.log('函數聲明會被提升到函數調用之前')} func();*/
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64059.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL的索引失效的原因有那些

1. 數據類型不匹配 詳細說明&#xff1a;MySQL在比較不同數據類型的值時&#xff0c;可能會嘗試進行隱式轉換。如果這種轉換導致了復雜度增加或無法直接利用索引&#xff0c;則會導致索引失效。 實例與解決方案&#xff1a; -- 錯誤示例&#xff1a;數據類型不匹配 select *…

邁向未來:.NET技術的持續創新與發展前景

隨著信息技術的飛速發展&#xff0c;編程語言和開發框架不斷涌現&#xff0c;許多技術平臺以其獨特的優勢贏得了開發者的青睞。在這場技術的競爭中&#xff0c;.NET平臺憑借其卓越的性能、廣泛的生態系統以及持續創新的精神&#xff0c;成為了全球開發者的重要選擇。本文將探討…

微信小程序-基于Vant Weapp UI 組件庫的Area 省市區選擇

Area 省市區選擇&#xff0c;省市區選擇組件通常與 彈出層 組件配合使用。 areaList 格式 areaList 為對象結構&#xff0c;包含 province_list、city_list、county_list 三個 key。 每項以地區碼作為 key&#xff0c;省市區名字作為 value。地區碼為 6 位數字&#xff0c;前兩…

Canvas指定三角形內部生成隨機點

使用重心坐標&#xff08;barycentric coordinates&#xff09;或者通過面積比例的方法來確定點是否在三角形內。不過&#xff0c;對于簡單的應用&#xff0c;一種常見的方法是使用隨機點并檢查它們是否在三角形內部。如果不在&#xff0c;就重新生成&#xff0c;直到得到足夠數…

智駕感知「大破局」!新一輪混戰開啟

隨著智能駕駛搭載率的攀升&#xff0c;艙外傳感器賽道迎來新變局。 一方面&#xff0c;從近幾年智駕傳感器的配置變化來看&#xff0c;攝像頭的主導地位顯而易見。 12月10-12日&#xff0c;由德賽西威總冠名的2024&#xff08;第八屆&#xff09;高工智能汽車年會暨年度金球獎…

深入解析Android Recovery系統

深入解析Android Recovery系統 引言 在Android系統中,Recovery模式是一個非常重要的組成部分。它主要用于系統的恢復、更新和修復。當用戶遇到系統問題時,Recovery模式可以提供一種安全的方式來恢復系統到正常狀態。本文將深入探討Android Recovery系統的實現原理,重點分析…

Kibana8.17.0在mac上的安裝

1、Kibana是什么 Kibana是與elasticsearch配套使用的數據分析與可視化工具&#xff0c;通過Kibana可以輕松與es中存儲的數據進行高效的交互&#xff0c;包括數據寫入、檢索、刪除等操作&#xff0c;并可以通過編寫部分代碼將數據做成各種報表&#xff0c;從而進行非常直觀的統…

數字IC后端設計實現十大精華主題分享

今天小編給大家分享下吾愛IC社區星球上周十大后端精華主題。 Q1:星主&#xff0c;請教個問題&#xff0c;長tree的時候發現這個scan的tree 的skew差不多400p&#xff0c;我高亮了整個tree的schematic&#xff0c;我在想是不是我在這一系列mux前邊打斷&#xff0c;設置ignore p…

給bmp和png,設置BLENDFUNCTION的AlphaFormat不同參數的效果

BLENDFUNCTION是AlphaBlend用控制透明效果的重要參數。 選擇一個32位的png圖片&#xff0c;設置AlphaFormat 為 AC_SRC_ALPHA&#xff0c;效果如上圖。 選擇一個32位的png圖片&#xff0c;設置AlphaFormat 為 0&#xff0c;效果如上圖。 選擇一個24位的bmp圖片&#xff0c;設置…

ChildLife“童年時光杯”足球聯賽啟動 共促青少年健康成長

2024年12月21日至22日&#xff0c;由美國知名嬰幼兒營養品牌ChildLife童年時光贊助的“童年時光杯”青少年足球聯賽將在上海拉開帷幕。本次賽事U7/U8組別共有16支足球隊參賽&#xff0c;包括上海幸運星足球俱樂部旗下的明星球隊&#xff0c;以及其他青少年俱樂部的優秀隊伍&…

面向對象的基本原則【學習、記錄】

1、單一職責原則定義 一個對象應該只包含單一的職責&#xff0c;并且該職責被完整地封裝在一個類中。就一個類而言&#xff0c;應該僅有一個引起它變化的原因。 2、開閉原則定義 一個軟件實體應當對擴展開放&#xff0c;對修改關閉。 3、里氏代換原則定義 如果對每一個類型為S的…

什么是根服務器?有什么作用?

你知道什么是根服務器嗎?在互聯網的龐大架構中&#xff0c;根服務器很多人對它的了解并不深入。那么&#xff0c;根服務器到底是什么&#xff0c;它有什么作用呢? 什么是根服務器? 根服務器是互聯網域名系統(DNS)的一部分&#xff0c;負責管理和維護最頂層的域名信息。簡單…

MTK--mt7921 usb wifi debug

文章目錄 1、代碼編譯2、配置文件修改3、Wifi設置命令4、Wifi debug 淘寶隨便買個7921的usb wifi。 1、代碼編譯 export TEMPLATECONF${PWD}/meta/meta-mediatek-mt8518/conf/base/aud8518sp2-slc-32b-7921-c4a-user source meta/poky/oe-init-build-env bitbake mtk-image-au…

日志層次結構及logger.propagate的作用

一、Python logging 模塊的層次結構 Python 的 logging 模塊提供了一個靈活的日志系統&#xff0c;適用于各種規模的應用程序。其核心設計基于層次化的命名系統&#xff0c;使得日志記錄可以按照組織結構進行管理和配置。 1. Logger&#xff08;日志器&#xff09; 定義&…

如何配置OSB連接數據連接/讀取超時

1.Oracle DB OSB中的DBAdapter的查詢超時參數配置沒用&#xff0c;要解決接口超時問題&#xff0c;需要在console中的數據源配置超時參數&#xff1a; oracle.net.CONNECT_TIMEOUT30000 oracle.net.READ_TIMEOUT30000 添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選…

一起學Git【第六節:查看版本差異】

git diff是 Git 版本控制系統中用于展示差異的強大工具。他可以用于查看文件在工作區、暫存區和版本庫之間的差異、任意兩個指定版本之間的差異和兩個分支之間的差異等,接下來進行詳細的介紹。 1.顯示工作區與暫存區之間的差異 # 顯示工作區和暫存區之間的差異,后面不加參數…

Python數據處理——re庫與pydantic的使用總結與實戰,處理采集到的思科ASA防火墻設備信息

目錄 Python正則表達式re庫的基本用法 引入re庫 各函數功能 總結 使用方法舉例 正則表達式語法與書寫方式 正則表達式的常用操作符 思科ASA防火墻數據 數據1 數據2 書寫正則表達式 Python中pydantic的使用 導入基礎數據模板 根據數據采集目標定義Pydantic數據類型…

Yolo11改進策略:Head改進|DynamicHead,利用注意力機制統一目標檢測頭部|即插即用

摘要 論文介紹 本文介紹了一種名為DynamicHead的模塊,該模塊旨在通過注意力機制統一目標檢測頭部,以提升目標檢測的性能。論文詳細闡述了DynamicHead的工作原理,并通過實驗證明了其在COCO基準測試上的有效性和效率。 創新點 DynamicHead模塊的創新之處在于它首次嘗試在一…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 這兩個條件之間的區別

文章目錄 1、什么是空字符串&#xff1f;2、兩個引號之間加上空格 好的&#xff0c;我們來詳細解釋一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 這兩個條件之間的區別&#xff0c;以及它們在 SQL 查詢中的作用&#xff1a; 1. we_chat_union_id IS NOT NULL 含…

如何利用AWS監聽存儲桶并上傳到tg bot

業務描述&#xff1a; 需要監聽aws的存儲中的最新消息&#xff0c;發送新的消息推送到指定tg的頻道。 主要流程&#xff1a; 1.上傳消息到s3存儲桶&#xff08;不做具體描述&#xff09; 2.通過aws的lambda監聽s3存儲桶的最新消息&#xff08;txt文件&#xff09; 3.將txt文件…