66-ES6:var,let,const,函数的声明方式,函数参数,剩余函数,延展操作符,严格模式

news2024/11/18 2:39:17

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 initialization
      let a = 10;
      // let a = 100;// Identifier 'a' has already been declared
      a = 100; //允许重新赋值
      {
        let a = 100;//此处通过let声明变量a,作用域仅限于当前代码块内部,所以let声明的变量是块及作用域
        console.log('代码块中let a=',a);//代码块中let a= 100
        debugger;//用于调试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 executed
      function 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,2
      add([3,4]);//输出[3, 4] undefined//赋值给a变量,b变量没有赋值
      let arr = [3,4];
      add(...arr);//输出3,4

      let str = 'xy';
      add(...str);//x y

      let 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.coloradmin.cn/o/1491290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新LangChain+GLM4开发AI应用程序系列(三):RAG检索增强生成篇

最新LangChainGLM4开发AI应用程序系列&#xff08;三&#xff09;&#xff1a;RAG检索增强生成篇 一、前言二、RAG介绍1、文档加载器2、文本分割器3、嵌入模型4、向量数据库 三、RAG开发案例1、创建智谱GLM4大模型对象2、加载文档3、文本分割4、向量化存储5、向量库检索6、生成…

初始网络 --- 网络基础

目录 0、 前言 1、 计算机网络发展背景 1.1. 局域网(LAN) && 广域网(WAN) 2、 认识并理解协议 3、 初始网络协议 3.1. 协议分层 4、 TCP/IP 五层(或四层)模型 4.1. 简单了解TCP/IP层状体系 4.2. TCP/IP协议层状结构和计算机层状结构的关系 5、 OSI七层模型 …

程序员如何选择职业赛道:探索未知,寻找激情

作为程序员&#xff0c;我们时常面临职业选择的难题。在这个充满变革的行业中&#xff0c;如何选择适合自己的职业赛道成为了我们关注的焦点。本文将探讨程序员如何选择职业赛道&#xff0c;帮助你找到适合自己的发展方向。 一、认识自己的兴趣和激情 首先&#xff0c;我们需要…

为什么要用云手机进行国外社媒监控?

随着全球化的不断发展&#xff0c;社交媒体已成为企业推动全球品牌知名度和业务流量的关键渠道。在这个数字时代&#xff0c;云手机作为一种强大的工具&#xff0c;为国外社交媒体监控提供了全新的可能性。在这篇文章中&#xff0c;我们将探讨使用云手机进行国外社媒监控的重要…

RHCSA练习2

一、实验题目 1、文件查找 &#xff08;1&#xff09;在当前目录及子目录中&#xff0c;查找小写字母开头的txt文件 [rootroot ~]# cd /etc [rootroot etc]# find . -type f -name [a-z]*.txt &#xff08;2&#xff09;在/etc及其子目录中&#xff0c;查找host开头的文件 …

Java解决杨辉三角

Java解决杨辉三角 01 题目 给定一个非负整数 *numRows&#xff0c;*生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRo…

人工智能-飞桨

文章目录 概要安装零基础教程基础知识小结 概要 集核心框架、基础模型库、端到端开发套件、丰富的工具组件于一体的深度学习平台 官方入口 安装 python安装 python官方下载 PaddlePaddle安装 python -m pip install paddlepaddle2.6.0 -i https://mirror.baidu.com/pypi/s…

【C++】类和对象终篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 友元2.1 友元函数2.2 友元类 3. 内部类4. 匿名对象5. 拷贝对象时的一些编译器优化6. 再次理解类和对象 1. 前言 在上一篇博客中提到了类和对象中的构造函数与stat…

数据库系统概论(超详解!!!) 第二节 数据模型

1.数据模型分为两类&#xff08;两个不同的层次&#xff09; &#xff08;1&#xff09; 概念模型 &#xff0c;也称信息模型&#xff0c;它是按用户的观点来对数据和信息建模&#xff0c;用于数据库设计。 &#xff08;2&#xff09; 逻辑模型 &#xff0c;逻辑模型主要包括…

Mybatis实现分页查询数据(代码实操讲解)

在MyBatis中实现分页查询的常见方式有两种&#xff1a;使用MyBatis内置的分页插件如PageHelper&#xff0c;或者手动编写分页的SQL语句。下面我将为你提供两种方式的示例代码。 使用PageHelper分页插件 首先&#xff0c;确保你的项目中已经添加了PageHelper的依赖。在Maven项…

2023 2024年全国职业院校技能大赛中职组网络建设与运维赛项服务器Linux部分教程解析

欢迎合作 需要资料请私 Rocky 9 包含各种常考服务(包括新题型KVM等)

RabbitMQ是如何保证高可用的?

RabbitMQ可以通过多种方式来实现高可用性&#xff0c;以确保在硬件故障或其他不可预测的情况下&#xff0c;消息队列系统仍然能够正常 运行。RabbitMQ有三种模式&#xff1a;单机模式&#xff0c;普通集群模式&#xff0c;镜像集群模式。 其中单机模式一般用于demo搭建&#x…

unocss 究竟比 tailwindcss 快多少?

unocss 究竟比 tailwindcss 快多少&#xff1f; 前言 我们知道 unocss 很快&#xff0c;也许是目前最快的原子化 CSS 引擎 (没有之一)。 unocss 解释它为什么这么快的原因&#xff0c;是因为它不用去解析 CSS 抽象语法树&#xff0c;直接在 content 里面通过正则表达式从内容…

基本设计模式

单例模式 ES5 function Duck1(name:string){this.namenamethis.instancenull }Duck1.prototype.getNamefunction(){console.log(this.name) }Duck1.getInstancefunction(name:string){if(!this.instance){this.instance new Duck1(name)} } const aDuck1.getInstance(a) const…

【王道操作系统】ch2进程与线程-01进程与线程(长文预警)

文章目录 【王道操作系统】ch2进程与线程-01进程与线程01 进程的概念、组成和特征&#xff08;1&#xff09;进程的概念&#xff08;2&#xff09;进程&#xff08;进程实体&#xff09;的组成①PCB&#xff08;给操作系统用的&#xff09;②程序段&#xff08;给进程自己用的&…

【YOLO v5 v7 v8 v9小目标改进】DWRSeg:优化的多尺度处理,传统的深度学习模型可能在不同尺度的特征提取上存在冗余

DWRSeg&#xff1a;优化的多尺度处理&#xff0c;传统的深度学习模型可能在不同尺度的特征提取上存在冗余 提出背景问题&#xff1a;实时语义分割需要快速且准确地处理图像数据&#xff0c;提取出有意义的特征来识别不同的对象。 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔…

开发知识点-Python-爬虫

爬虫 scrapybeautifulsoupfind_all find祖先/父节点兄弟节点nextpreviousCSS选择器属性值 attrsselect 后 class 正则使用字符串来描述、匹配一系列符合某个规则的字符串组成元字符使用grep匹配正则组与捕获断言与标记条件匹配正则表达式的标志 特定中文 匹配 scrapy scrapy内…

ArcGIS学习(十三)多源数据下的城市街道功能评估

ArcGIS学习(十三)多源数据下的城市街道功能评估 本任务带来的内容是多元数据下的城市街道功能评估。本任务包括两个关卡: 城市街道空间中观解读 城市街道功能详细评价 首先,我们来看看本任务的分析思路。 1.城市街道空间中观解读 下面我们正式进入第一关的内容一- 城市…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

每日学习总结20240301

20240301 1. strchr VS strrchr strchr和strrchr是C语言标准库中的字符串处理函数&#xff0c;用于在字符串中查找特定字符的位置。 1.1 strchr函数 strchr函数用于在字符串中查找第一次出现指定字符的位置&#xff0c;并返回该位置的指针。函数原型如下&#xff1a; char…