JavaScript进阶:js的一些学习笔记

文章目录

        • 1. js作用域
        • 2. 函数
        • 3. 解构赋值

1. js作用域

作用域规定了变量能够呗访问的范围,离开这个范围,这个变量就不能够被访问到。

  • 局部作用域:可以分为函数作用域和块作用域

    • 块作用域,let 声明会产生块级作用域,var 声明不会产生作用域

      <!DOCTYPE html>
      <html>
      <head><title></title>
      </head>
      <body></body>
      <script type="text/javascript">if(true){var a = 10;}console.log(a); 
      </script>
      </html>
      

      控制台上输出:10

  • 全局作用域

  • 作用域链:底层就是变量查找机制

    • 在函数被执行时,会优先查找当前函数作用域中查找变量
    • 如果当前作用域找不到则会依次逐级查找父级作用域直到全局作用域
  • js垃圾回收机制(简称gc)

    • 生命周期:内存分配、内存使用、内存回收
    • 全局变量一般不会被回收的
    • 一般情况下局部变量的值,不用了,会被自动回收
    • 内存泄漏:程序中分配的内存由于某种原因程序未释放或无法释放叫做内存泄漏
  • 闭包:

    • function fn(){let a = 10;return function(){return a;}
      }
      
    • 外部也可以访问函数内部的变量

  • 变量提升

    • 把所以var声明的变量提升到当前作用域的最前面

    • 只提升声明,不提升赋值

    • console.log(a);
      var a = 10;
      // 结果为undefined
      
    • 上述代码相当于

    • var a
      console.log(a)
      a = 10
      
2. 函数
  • 函数提升

    • fn()
      function fn(){console.log('函数提升');
      }
      // 打印 函数提升
      
    • 只提升函数声明,不提升函数调用

    • fun()
      var fun = function(){console.log('函数表达式')
      }
      // 报错
      
    • 函数表达式必须先声明,后调用

  • 函数参数

    • 动态参数

      • arguments 动态参数,只存在于函数里面,是个伪数组

      • function sum(){let v = 0;for(let e of arguments){v += e;}return v;
        }
        console.log(sum(1,2,3));
        console.log(sum(1,2,3,4));
        // 6
        // 10
        
    • 剩余参数

      • function fun(...args){let v = 0;for(let e of args){v += e;}return v;
        }
        console.log(fun(1,2,3));
        console.log(fun(1,2,3,4));
        // 6
        // 10
        
  • 箭头函数:更简短的函数写法并且不绑定this,箭头函数的写法比函数表达书更简洁

    • const fn = ()=>{console.log(123);
      }
      
    • 只有一个形参的时候,可以省略小括号

    • const fn = x=>{console.log(x);
      }
      
    • 只有一行代码的时候,可以省略大括号

    • const fn = x=>console.log(x);
      
    • 只有一行代码,可以省略return

    • const fn = x => x+x;
      // 相当于如下
      const fn = (x)=>{return x + x;
      }
      
    • 箭头函数没有arguments动态参数,但是有剩余参数 …args

    • this的指向问题

      • 普通

      • console.log(this);
        // 指向window
        function fn(){console.log(this); // 指向window
        }
        window.fn();
        const obj = {hello:function(){console.log(this);}
        }
        obj.hello();
        // this 指向obj这个对象
        
      • 箭头函数

      • const fn = ()=>{console.log(this);
        }
        // 箭头函数的this指向其上一层的this
        fn();
        // 结果为windowconst obj = {hello:()=>{console.log(this);}
        }
        obj.hello();
        // this指向window
        // 箭头函数中没有this,找上一层this的指向
        
3. 解构赋值
  • 数组结构:将数组的单元值快速批量赋值给一系列变量的简洁语法

    • const [a,b,c] = [1,2,3];
      console.log(a,b,c);
      // 1,2,3
      
    • 应用:变量交换

      var a = 1,b=2;
      [a,b] = [b,a];
      console.log(a,b);
      // 2,1
      
    • 剩余参数

      const [a,b,...c] = [1,2,3,4];
      console.log(a,b,c);
      // 1,2,[3,4]
      
    • 防止undefined

      const [a=0,b=1]=[1,2];
      console.log(a,b);
      // 1,2
      
    • 忽略某个值

      const [a,,c] = [1,2,3];
      console.log(a,c);
      // 1,3
      
  • 对象结构:将对象属性和方法快速批量赋值给一系列变量的简洁语法

    • const obj = {username:'liuze',age:23,address:'湖南长沙'
      }
      // 对象结构
      const {username,age,address} = obj;
      console.log(username,age,address);
      // liuze 23 湖南长沙
      
    • 对象属性的值将被赋值给与属性名相同的变量

    • 对象的结构的变量名可以重新改名 旧变量名:新变量名

    • const {username:uname,age,address} = obj;
      console.log(uname,age,address);
      // liuze 23 湖南长沙
      
    • 多层对象的结构

    • const obj = {obj1:{uname:'liuze',age:23}	
      }
      const {obj1:{uname,age}} = obj;
      console.log(uname,age);	
      // liuze 23
      

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

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

相关文章

武汉星起航:秉承客户至上服务理念,为创业者打造坚实后盾

在跨境电商的激荡浪潮中&#xff0c;武汉星起航电子商务有限公司一直秉持着以客户为中心的发展理念&#xff0c;为跨境创业者提供了独特的支持和经验积累&#xff0c;公司通过多年的探索和实践&#xff0c;成功塑造了一个以卖家需求为导向的服务平台&#xff0c;为每一位创业者…

window python开发环境搭建- Anaconda

window python开发环境搭建- Anaconda 下载Anacnoda配置Anconda验证Anaconda是否安装成功验证 conda 是否安装成功验证 pip 是否安装成功验证 python 是否安装成功 配置镜像源conda 镜像源pip 镜像源 pip 常用命令conda 常用命令 下载Anacnoda anacoda官网地址 https://www.an…

hive库表占用空间大小的命令

1、查每个hive表占用的空间大小 hdfs dfs -du -h /user/hive/warehouse 2、按占用空间大小降序排列 hdfs dfs -du /user/hive/warehouse/ipms.db | sort -nr 3、查某一个分区占用空间大小&#xff08;单位G) hadoop fs -ls /user/hive/warehouse/ipms.db/dw_ft_se_nt_u_gen…

如何在vscode中误删了文件怎么办

一、问题描述 在vscode中误删了文件&#xff0c;遇到了好几次这种情况&#xff0c;今天在网上看到了解决方案&#xff0c;记录一下。 二、解决方案 快捷键&#xff1a;ctrlshiftp 输入命令Find Entry to Restore 既可查看过去文件历史&#xff0c;从里面就能找到删除的文件。

【vue在主页中点击主页面如何弹出一个指定某个页面的窗口】

【vue在主页中点击主页面跳转到某个页面的操作完整过程】 1.首先在主页面中加入一个卡槽用于展示弹出的窗口 代码如下&#xff1a; <el-dialog :visible.sync"dialogVisible1" :close-on-click-modal"false" :title"title" class"dial…

代码随想录算法训练营第八天|344. 反转字符串

344. 反转字符串 已解答 简单 相关标签 相关企业 提示 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#…

[LeetCode][LCR 194]二叉树的最近公共祖先

题目 LCR 194. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 例如&#xff0c;给定如下二叉树: root [3,5,1,6,2,0,8,null,null,7,4] 示例 1: 输入: root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 1 输出: 3 解释: 节点 5 和节点 1 的最…

#微信小程序(轮播图以及开发方法)

1.IDE&#xff1a;微信开发者工具 2.实验&#xff1a;轮播图以及正确的开发方法 &#xff08;1&#xff09;有HTML&#xff0c;CSS&#xff0c;javascript基础即可 &#xff08;2&#xff09;写界面一定要查看开发手册&#xff0c;这是微信小程序比较好的地方&#xff0c;由于…

QT----基于QT的人脸考勤系统(未完成)

目录 1 编译opencv库1.1 下载源代码1.2 qt编译opencv1.3 执行Cmake一直卡着data: Download: face_landmark_model.dat 2 编译SeetaFace2代码2.1 遇到报错By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has2.2遇到报错Model missing 3 测试…

机试:成绩排名

问题描述: 代码示例: #include <bits/stdc.h> using namespace std;int main(){cout << "样例输入" << endl; int n;int m;cin >> n;int nums[n];for(int i 0; i < n; i){cin >> nums[i];}// 排序for(int i 0; i < n; i){//…

IP地址无所遁形!试试这个3k星热门开源查询神器!

在日常开发中&#xff0c;我们经常需要查询IP地址的位置信息&#xff0c;比如&#xff1a; 网站统计&#xff1a;统计用户的来源地&#xff0c;了解访问者分布情况&#xff1b;安全防护&#xff1a;根据IP地址判断用户是否来自风险地区&#xff0c;加强安全防护措施&#xff1…

13.7 Map 接口(血干JAVA系列)

这里写目录标题 13.7.1 Map接口简介13.7.2 Map.Entry接口简介13.7.3 Map接口的常用子类1.新的子类&#xff1a;HashMap2.相关操作实例(1)实例操作1——向集合中增加和取出内容【例13.26】增加和取得内容 (2)实例操作2------------ 判断指定的key或value是否存在【例13.27】判断…

VMware16如何克隆虚拟机

目录 克隆虚拟机方式一(在Windows上复制粘贴)克隆虚拟机方式二(使用VM的克隆操作 克隆之前需要关机)修改克隆机的IP和主机名虚拟机快照虚拟机的迁移和删除 克隆虚拟机方式一(在Windows上复制粘贴) 直接拷贝一份你已经安装好的虚拟机 复制到目的主机上 然后用VM就能打开它 甚至…

索引覆盖和索引下推

索引覆盖和索引下推 索引覆盖&#xff08;Covering Index&#xff09;&#xff1a; 在数据库查询优化中&#xff0c;当一个索引包含了SQL查询语句所需要的全部列时&#xff0c;数据库可以直接使用索引来获取所有数据&#xff0c;而无需回表访问实际的数据行&#xff0c;这就实…

egg.js学习记录

1.创建egg项目并启动后端服务器 pnpm create egg //创建项目 //选择simple就行 pnpm i //下载插件 pnpm run dev //运行项目 2.安装跨域依赖和数据库依赖 pnpm i egg-cors //跨域依赖 pnpm i egg-mysql //数据库依赖 pnpm i egg-scripts //部署 3.修改配置…

全视智慧机构养老解决方案,以科技守护长者安全

2024年2月28日凌晨1时许&#xff0c;在上海浦东大道的一家养护院四楼杂物间内发生了一起火灾事故。尽管火势不大&#xff0c;过火面积仅为2平方米&#xff0c;但这场小火却造成了1人死亡和3人受伤的悲剧。这一事件再次提醒我们&#xff0c;养老院作为老年人聚集的场所&#xff…

敏捷开发精准估算

估算并非易事。对软件开发人员来说&#xff0c;估算堪称是最难的工作之一。估算必须考虑所有能帮助产品负责人做出影响整个团队和业务决策的因素。因此&#xff0c;从开发到高管都为它焦头烂额也不足为奇&#xff0c;但这种做法是错误的。敏捷估算并不是什么性命攸关的大事&…

人人站CMS后台登不进去解决方案(已解决)

公司有一个网站使用的是人人站CMS&#xff0c;最近发现后台登录不进去&#xff0c;有以下报错 发生以下错误: file get contents(http://www.rrzcms.com/Public/cms/config/config.ison): failed to open stream: HTTP reguest failed! 请求的URL导致内部服务器错误。 如果您反…

win11文件共享失败的问题

前言 windows 11连接公司内部服务器报错&#xff0c;报错如下&#xff1a; 因为文件共享不安全&#xff0c;所以你不能连接到文件共享。此共享需要过时的SMB1协议&#xff0c;而此协议是不安全的&#xff0c;可能会使你的系统遭受攻击。你的系统需要SMB2或更高版本。有关如何解…

JavaScript进阶:js的一些学习笔记-2

文章目录 1. 构造函数1. 实例成员、静态成员2. 内置的构造函数 1. 构造函数 构造函数是一种特殊的函数&#xff0c;主要用来创建对象。通过构造函数可以快速创建多个类似的对象 创建对象的三种方式 const obj1 {username:liuze}; // 方法1 const obj2 new Object(); obj2.u…