66-ES6:var,let,const,函數的聲明方式,函數參數,剩余函數,延展操作符,嚴格模式

1.JavaScript語言的執行流程

編譯階段:構建執行函數;執行階段:代碼依次執行

2.代碼塊:{ ? }

3.變量聲明方式var

有聲明提升,允許重復聲明,聲明函數級作用域

訪問:聲明后訪問都是正常的,在聲明之前訪問值為undefined

(對于變量來說,變量允許使用的范圍被稱為作用域)

    <script>//for(表達式1;表達式2;表達式3)//表達式1 執行1次//表達式2 執行n+1次//表達式3 執行n次for(var i = 0;i<10;i++){console.log(i);}debugger;//此處可以訪問到i變量,可以證明var聲明的變量是函數級作用域console.log('循環后輸出i變量的值',i)//10</script>

4. ES6新增的變量聲明方式let

沒有聲明提升,不允許重復聲明但允許重新賦值,聲明塊及作用域?

訪問:聲明前不允許訪問

(變量訪問時,如果當前作用域不存在,則沿作用域向上級作用域查找,找到即返回,直到全局作用域未找到返回undefined)

    <script>//console.log('let聲明變量a:',a);//Cannot access 'a' before initializationlet a = 10;// let a = 100;// Identifier 'a' has already been declareda = 100; //允許重新賦值{let a = 100;//此處通過let聲明變量a,作用域僅限于當前代碼塊內部,所以let聲明的變量是塊及作用域console.log('代碼塊中let a=',a);//代碼塊中let a= 100debugger;//用于調試JS代碼}console.log('a',a);//a 100</script>
    <script>for(let i = 0;i<10;i++){console.log(i);//1,2,3,4,5,6,7,8,9}console.log('循環后輸出i變量的值',i);//此處訪問的是全局變量i,所以報錯</script>

5.變量聲明方式const

聲明前必須復制,不允許重復賦值,塊級作用域,不存在變量提升

暫時性死區:聲明(編譯階段)到賦值(執行階段)之間的區域被稱為暫時性死區

    <script>/***    - JS中的數據類型*      - 數值類型*      - Number,String,Boolean,Null,Undefined*      - 引用類型*      - Array,Object*  對于引用類型來說,通過地址修改屬性的值,不是重新賦值*  const修飾的是變量的特征,而不是對象的特征*///聲明時必須賦值const a = 10;{const a = 100;console.log(a);//100}//a = 200;//報錯,常量不允許重新賦值console.log(a);//10//對于引用類型來說,變量中存儲的地址改變了,才是重新賦值const obj = {name:'張三',age:18}//通過obj修改了name屬性的值obj.name = '李四';//obj = [4,5,6];//報錯,因為變量的值不能改變console.log(obj);//age:18,name:"李四"</script>

6.函數的聲明方式

6.1new Function()構造函數形式

      // new Function()構造函數形式let fn1 = new Function('return 1');console.log(fn1.toString());//function anonymous() {return 1};

6.2function函數聲明

聲明前置(提升),可以在聲明前調用,必須擁有函數名,并且函數名符合標識規范

    <script>//function函數聲明fn2();//輸出fn2 executedfunction fn2(){console.log('fn2 executed');return 2;}fn2();//輸出fn2 executed</script>

6.3函數表達式let fn() = function(){}

    <script>fn3();//報錯,var fn3相當于變量提升,值為undefind,不是函數不可以調用var fn3 = function(){console.log('fn3 executed');return 3;}fn3();//fn3 executed</script>

6.4立即執行函數表達式(function() {})()

function前面一定要加(),因為function是關鍵字,function如果作為一行的第一個字符,則被認為函數聲明結構

    <script>//立即執行函數表達式,是特殊的函數表達式形式,聲明后立即調用,特性與函數表達式方式相同//此處只需要證明function不是第一個字符(function(){console.log('fn4 executed');})();</script>

7.函數參數

函數定義時被稱為形參,函數調用時參數被稱為實參;實參的數量=形參的數量時依次賦值;實參的數量>形參的數量時依次賦值多余的實參被忽略;實參的數量<形參的數量時依次賦值未被賦值的形參為undefined

    <script>//形參默認值function fn(a,b,c,d=500){console.log(a,b,c,d);}fn(1,2,3,4);//輸出1,2,3,4//當實參的值為undefined時執行默認值fn(1,2,3,undefined,null);//輸出1,2,3,500</script>

8.剩余參數...args在函數定義時,被稱為剩余函數???????

函數聲明時使用;ES6新特性,用于替換arguments對象?

特征:只能有一個剩余函數;必須是最后一個參數;?是數組,可以使用數組的方法

    <script>function add(a,b,...args){console.log(a,b,args);}add(1,2,3,4,5,6,7,8,9,10);</script>

    <script>function add(a,b,...args){console.log(a,b,...args);}add(1,2,3,4,5,6,7,8,9,10);//輸出1 2 3 4 5 6 7 8 9 10</script>

?9.延展操作符...變量

可以展開的是可迭代對象(ES6中新增的內容),延展操作符可以展開變量的內容

延展操作符與剩余參數二者格式相同,都是...變量;在函數調用時使用,是延展操作符 ,將可迭代對象展開

    <script>function add(a,b){console.log(a,b);}add(1,2);//輸出1,2add([3,4]);//輸出[3, 4] undefined//賦值給a變量,b變量沒有賦值let arr = [3,4];add(...arr);//輸出3,4let str = 'xy';add(...str);//x ylet obj = {name:'zhangsan',age:18}//add(...obj);//報錯//默認情況下,對象不能展開let array = ['a','b','c'];console.log(array);//['a', 'b', 'c']console.log(...array);//a b c//可迭代對象中每一個項作為參數傳遞給函數console.log('a','b','c');//a b c//...array效果相同</script>

10.嚴格模式

就是在代碼的頭部加上use strict????????

在嚴格模式下,函數的arguments和當前函數定義的形參是沒有映射關系,并且禁用arguments.callee和arguments.callee.caller(caller是function的屬性)

arguments變成類數組對象?(特征像數組,擁有length屬性,本質是一個對象)

    <script>function fn3(a,b,c){"use strict";//嚴格模式的開關,如果解釋器識別則進入嚴格模式console.log(arguments);console.log(a,b,c);}fn3(4,5,6);</script>

?函數的形參擁有默認值函數內部自動進入嚴格模式?

    <script>function fn3(a,b,c=100){console.log(arguments);console.log(a,b,c);}fn3(4,5,6);</script>

兩種代碼輸出結果一致?

??????????????

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

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

相關文章

拿下邊界機器進行內網滲透的方案

拿下機器后&#xff0c;使用代理訪問內網 windows環境&#xff1a;reGeorg與proxifier Linux環境&#xff1a;reGeorg與proxychains&#xff0c; 使用nmap等工具進行掃描&#xff0c;發現web服務的主機和其它信息。有時這些邊界機器上會記錄一些 內網服務器上的一些信息&…

QT C++實現點擊按鍵彈出窗口并顯示圖片/視頻|多窗口應用程序的設計和開發

一、介紹 首先&#xff0c;QT界面開發中主要大體分為2種多窗口的形式&#xff1a; 嵌入式&#xff1a; 新生成的窗口嵌入在主窗口內部獨立窗口&#xff1a; 以彈窗形式的新窗口生成和展示 這里就講解最簡單的&#xff1a;點擊案件后&#xff0c;跳出一個新窗口 二、代碼實…

利用FFMPEG 將RTSP流的音頻G711 轉碼為AAC 并 推流到RTMP

之前我們的視頻轉碼項目中 是沒有加入音頻的 現在 需要加入音頻 &#xff0c;由于RTMP只支持AAC的 音頻流 而有的RTSP流的音頻編碼并不是AAC 大多數都是G711編碼 還分為G711A 和G711U 之前用ffmpeg命令行可以直接 完成轉碼 并推送到RTMP 但是考慮到無法獲取更詳細的狀…

Qt篇——QTableWidget保存表格數據到Excel文件中,讀Excel內容到QTableWidget

表格和excel例子如下圖所示&#xff1a; 一、QTableWidget保存表格數據到Excel文件中 代碼如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTi…

六、MQTT源碼簡單瀏覽

1、MQTT程序分層 1.1、MQTT客戶端工作流程 (1)連接MQTT服務器。 (2)客戶端向服務器發送訂閱主題。 (3)客戶端等待MQTT的消息。 (4)客戶端向服務器發送消息。 2.2、MQTT程序結構 APP層 while循環或一個進程中&#xff1a;等待消息&#xff0c;處理消息&#xff1b; 發送消…

[法規規劃|方案實操]數據資產入表,城投將獲融資新渠道

2023年8月&#xff0c;財政部發布了《企業數據資源相關會計處理暫行規定》&#xff0c;并從2024年1月1日開始實施&#xff0c;標志著數據資產正式納入企業的資產負債表。這一舉措被視為數據資產從理論走向實踐的重大一步。 數據資產入表對城投運營模式的影響 隨著全球經濟格局…

Vue3速成

文章目錄 day 11. 創建vue3工程3. 響應式數據4. 計算屬性 day 25. watch 監視6. watchEffect7. 標簽的ref屬性8. 回顧TS中的接口_泛型_自定義類型 day 1 1. 創建vue3工程 相關代碼如下&#xff1a; ## 創建vue工程 npm create vuelastest## 安裝node_modules npm install //…

JSON 文件里的 “$schema” 是干什么用的?

最近我在做一些前端項目&#xff0c;我發現有的配置文件&#xff0c;比如 .prettierrc.json 或者 tsconfig.json 里面都會看到一個 $schema 字段&#xff0c;有點好奇&#xff0c;就查了一下。 什么是 JSON Schema JSON Schema是一種基于JSON (JavaScript Object Notation) 的…

【Leetcode】2369. 檢查數組是否存在有效劃分

文章目錄 題目思路代碼結果 題目 題目鏈接 給你一個下標從 0 開始的整數數組 nums &#xff0c;你必須將數組劃分為一個或多個 連續 子數組。 如果獲得的這些子數組中每個都能滿足下述條件 之一 &#xff0c;則可以稱其為數組的一種 有效 劃分&#xff1a; 子數組 恰 由 2 個…

MATLAB算法實戰應用案例精講-【圖像處理】三維重建(最終篇)

目錄 前言 相機定標和三維重建 針孔相機模型和變形 三維成像 一、機器視覺系統組成

大數據智能化-長視頻領域

隨著數字化時代的到來&#xff0c;長視頻領域的發展迎來了新的機遇和挑戰。在這一背景下&#xff0c;大數據智能化技術的應用成為長視頻行業提升用戶體驗、優化運營管理的重要手段之一。本文將從優愛騰3大長視頻背景需求出發&#xff0c;分析靜態資源CDN、視頻文件存儲與分發、…

網絡安全、信息安全、計算機安全,有何區別?

這三個概念都存在&#xff0c;一般人可能會混為一談。 究竟它們之間是什么關系&#xff1f;并列&#xff1f;交叉&#xff1f; 可能從廣義上來說它們都可以用來表示安全security這樣一個籠統的概念。 但如果從狹義上理解&#xff0c;它們應該是有區別的&#xff0c;區別在哪呢&…

力扣hot100題解(python版36-40題)

36、二叉樹的中序遍歷 給定一個二叉樹的根節點 root &#xff0c;返回 它的 *中序 遍歷* 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]示例 3&#xff1a; 輸入&am…

tcping實用小工具

Tcping實用小工具命令詳解 一、tcping介紹 tcping&#xff1a;tcping命令基于tcp協議監控&#xff0c;可以從較低級別的協議獲得簡單的&#xff0c;可能不可靠的數據報服務。 原則上&#xff0c;TCP應該能夠在從容硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。 …

【機器學習基礎】層次聚類-BIRCH聚類

&#x1f680;個人主頁&#xff1a;為夢而生~ 關注我一起學習吧&#xff01; &#x1f4a1;專欄&#xff1a;機器學習 歡迎訂閱&#xff01;相對完整的機器學習基礎教學&#xff01; ?特別提醒&#xff1a;針對機器學習&#xff0c;特別開始專欄&#xff1a;機器學習python實戰…

企業微信私有部署:實現高效溝通與信息安全

隨著移動互聯網的快速發展&#xff0c;企業微信作為一種高效、便捷的通訊工具&#xff0c;已經成為了眾多企業的首選。然而&#xff0c;對于一些對信息安全有特殊要求的大型企業而言&#xff0c;使用公有版企業微信并不能滿足其安全需求。因此&#xff0c;企業微信私有部署應運…

matplotlib.animation 3d姿態動畫

目錄 演示效果&#xff1a; 演示代碼&#xff1a; 保存為gif 演示效果&#xff1a; 演示代碼&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定義人體關鍵點…

【c++入門】純粹的五位偶數

說明 純粹偶數指的是一個數的各個位都是偶數的數&#xff0c;比如&#xff1a;24686&#xff1b;請編程求出10000~n中&#xff0c;所有的五位的純粹偶數有多少個&#xff1f; 輸入數據 一個整數n&#xff08;n為一個5位的整數&#xff09; 輸出數據 一個整數&#xff0c;代…

網絡防御第6次作業

防病毒網關 按照傳播方式分類 病毒 病毒是一種基于硬件和操作系統的程序&#xff0c;具有感染和破壞能力&#xff0c;這與病毒程序的結構有關。病毒攻擊的宿主程序是病毒的棲身地&#xff0c;它是病毒傳播的目的地&#xff0c;又是下一次感染的出發點。計算機病毒感染的一般過…

Java基礎 - Stream 流:Stream API的中間操作

在上一篇博客中&#xff0c;我介紹了構建 Stream 流的多種方式&#xff0c;以及 Stream 流的特點和優勢。如果你還沒有閱讀&#xff0c;你可以點擊這里查看。 Java基礎 - Stream 流&#xff1a;構建流的多種方式 在這篇博客中&#xff0c;我將探索 Stream API 的中間操作&…