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 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>

两种代码输出结果一致 

​​​​​​​​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423775.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

殿堂级Flink源码极精课程预售

一、为什么我们要读源码? 1、让个人技术快速成长: 优秀的开源框架,底层的源码设计思想也非常优秀,同时还有含有大量的设计模式和并发编程技术&#xff0c;优秀的解决方案,熟读源码对猿们技术提升有很大帮助 2、新技术学习能力: Java开源码框架的源码熟读后&#xff0c;若出现…

挑战杯 基于机器视觉的车道线检测

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

Doris实战——银联商务实时数仓构建

目录 前言 一、应用场景 二、OLAP选型 三、实时数仓构建 四、实时数仓体系的建设与实践 4.1 数仓分层的合理规划 4.2 分桶分区策略的合理设置 4.3 多源数据迁移方案 4.4 全量与增量数据的同步 4.5 离线数据加工任务迁移 五、金融级数仓稳定性最佳实践 5.1 多租户资…

返回数据(返回视图所需要的数据)

在上篇文章中&#xff0c;小编带领大家了解到&#xff1a;返回静态数据-CSDN博客&#xff0c;但是&#xff0c;仅仅返回一个静态页面&#xff0c;对于静态页面的数据没正常返回&#xff01; 所以&#xff0c;本篇文章便讲述如何返回数据&#xff1f;&#xff1f; 还是先不管前…

AI大语言模型【成像光谱遥感技术】ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

Revit-二开之创建墙-(6)

Revit API窗间墙 protected override Result OnExecute(ExternalCommandData commandData, ref string message, ElementSet elements) {try{// 获取当前活动的文档

html基础标签+Http请求

文章目录 目录 文章目录 前言 一.网址组成 二.HTTP协议解析 Http 请求报文 报文请求方法 报文头 Cache-Control 常见缓存控制行为 cookie 解析 Http 响应报文 常见状态码 三.域名解析(DNS) DNS域名服务器分类 递归查询 迭代查询 四.端口号 五.路径信息 六.Https协议 ​对称…

毫末智行开年融资,揭幕了自动驾驶最后的赛点

毫末智行日前官宣拿到的超亿元B1轮融资&#xff0c;在行业引起了不小的关注。 一方面是信心问题&#xff0c;自动驾驶从早期拼技术到去年拼量产落地&#xff0c;创业公司们的声量此消彼长&#xff0c;有人领先也有人掉队&#xff0c;但市场的态度都以谨慎为主&#xff0c;甚至…

Vue组件置底方法,ElementPlus布局

问题描述 在开发网页时使用了elementplus的el-container组件 组件里分成了main和footer两块&#xff0c;但是想要将两个按钮置底在容器底部遇到了困难 如下图所示&#xff0c;在网页开发者工具可见两个按钮与左侧的图片没有底部对齐 此时我的代码是这样 <el-footer>&…

存储型xss案例

一、环境 DWVA网上自己找 二、开始闯关 先随便写看看 看看源码&#xff0c;数据是被插入到数据库里面了&#xff0c;魔术开关关闭了 数据最后插入显示到index.php 看一下我们目前的cookie值是 看了源码之后也没进行过滤那么我们试着直接插&#xff0c;看是否过滤 之后用户每…

监控与日志

一、监控 1、监控类型 从监控类型上划分&#xff0c;在 K8s 中可以分成四个不同的类型&#xff1a; ① 资源监控&#xff1a;这种监控主要关注于基础资源的使用情况&#xff0c;例如 CPU、内存、网络等。通常使用数值或百分比等单位来统计&#xff0c;可以通过 Zabbix、Tele…

Android 显示系统框架

一.FrameBuffer FrameBuffer 介绍&#xff1a; FrameBuffer中文译名为帧缓冲驱动&#xff0c;它是出现在2.2.xx内核中的一种驱动程序接口。主设备号为29&#xff0c;次设备号递增。 Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。FrameBuffer机制模仿显卡的功能…

github用法详解

本文是一篇面向全体小白的文章,图文兼备。为了让小白们知道如何使用GitHub,我努力将本文写得通俗易懂,尽量让刚刚上网的小白也能明白。所以各位程序员们都可以滑走了~ 啥是GitHub? 百度百科会告诉你, GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为…

可以用来测试的接口

实际开发过程中&#xff0c;我们可以通过postman工具来测试接口 get请求 https://api.github.com/events?id1&nameuser post请求 http://httpbin.org/post 参数1&#xff1a;key1value1 参数2&#xff1a;key2value2

2023年NOC大赛软件创意编程(学而思)赛道图形化小高组复赛试题

目录 第一题 闪烁的星星 第二题 聚沙成塔 第三题 画十字

力扣刷题:100.相同的树

题目&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff…

【JavaScript 漫游】【027】表单事件简记

文章简介 本篇文章为【JavaScript 漫游】专栏的第 026 篇文章&#xff0c;对 JavaScript 中的表单事件进行了简单记录。 input 事件 input 事件当 <input>、<select>、<textarea> 的值发生变化时触发。对于复选框&#xff08;<input typecheckbox>&…

百度搜索引擎SEO优化方法

随着互联网的不断发展&#xff0c;搜索引擎已经成为人们获取信息、产品和服务的主要途径之一。而在中国&#xff0c;百度作为最大的搜索引擎&#xff0c;其影响力不可忽视。了解并掌握百度SEO关键词优化方法&#xff0c;对于提升网站在搜索引擎中的排名至关重要。 关键词选择&a…

【硬件工程师面经整理12_逆变器篇】

文章目录 逆变器1.1 半桥逆变&#xff08;half-bridge inverter&#xff09;电路1.2 全桥逆变&#xff08;H-bridge inverter&#xff09;1.3 H桥电路结构&#xff0c;用的是什么管子&#xff0c;有没有出现问题&#xff0c;怎么解决的 逆变器 逆变电路的基本工作原理 单相桥…

双周回顾#005 - 零

一件悲伤的事实&#xff0c;这两周&#xff0c;成长值为零&#xff5e;&#xff5e; 从大数据部门临时抽调到互联网部门&#xff0c;支援重构的“配置下单”项目。 一个变种的低代码架构设计&#xff0c;唯一比较有意思的是它的业务组件的设计与校验设计&#xff0c;算是学习…