当前位置: 首页 > news >正文

学习:JS[9]作用域+函数进阶+深入对象+实例成员和静态成员

一.作用域

var不会产生块作用域

1.垃圾回收机制

a.内存的生命周期

  1. 内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存
  2. 内存使用:即读写内存,也就是使用变量、函数等
  3. 内存回收:使用完毕,由垃圾回收期自动回收不再使用的内存

b.说明

  1. 全局变量一般不会回收
  2. 一般情况下局部变量的值不使用会被回收

c.内存泄漏:程序中分配的内存由于某种原因程序未释放无法释放叫做内存泄漏

2.闭包

闭包=内层函数+外层函数的变量

闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量

可以实现数据私有,不能随意修改,里面的变量不会被回收

3.变量提升

  1. 把所有var声明的变量提升到当前作用域的最前面
  2. 只提升声明,不提升赋值

二.函数进阶

1.函数提升

函数在声明之前

提升只提升变量,不提升赋值

2.函数参数

a.动态参数

arguments只存在函数内部的伪数组变量,包含了调用函数时传入的所有实参

b.剩余参数

函数参数里的(...变量名)

是一个真数组(可以使用pop,push方法)

function getSum(a,b,...arr){console.log(arr)
}
getSum(2,3)
getSum(1,2,3,4,5)
//输出结果是第一个是[],因为将2给了a,3给了b,arr就为空
//第二个是[3,4,5],因为将1给了a,2给了b,3,4,5给了arr

3.箭头函数(重要)

目的:引入箭头函数的目的是更简短的函数写法并且不绑定this

使用场景:箭头函数更适用于那些本来需要匿名函数的地方

a.基本语法

 const fn=() =>{函数内容}
fn()//调用函数//省略小括号的情况
const fn=x =>{
函数内容
}
fn(1)//省略大括号的情况
const fn=x =>  console.log(x)
fn(1)//只有一行代码且有return的时候,可以省略大括号和return
const fn=x => x+x
fn(1)//箭头函数可以直接返回一个对象
const fn=(uname)=>({name:uname})
fn('刘德华')
  1. 只有一个形参的时候小括号可以省略
  2. 只有一行的时候,大括号可以省略
  3. 只有一行代码且有return的时候,可以省略大括号和return
  4. 箭头函数可以直接返回一个对象

b.箭头函数参数

  1. 普通函数有arguments动态参数
  2. 箭头函数没有arguments动态参数,但是有剩余参数...args

c.箭头函数this

箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this

三.解构赋值

1.数组解构

赋值运算符将数组的单元值快速批量赋值给一系列变量的简洁语法

a.交换两个变量

let a=1
let b=2;//一点要加分号,不然会报错
[b,a]=[a,b]

只要以数组开头的在前面加一个分号用来隔开

2.对象解构

a.语法

const {uname,age}={uname:'pink老师',age:'18'}//变量名可以重新改名
const {uname:username,age}={uname:'pink老师',age:'18'}

b.多级对象解构

根据给的多级对象解构,定义相同结构

3.遍历数组forEach方法(重点)

调用数组的每个元素,并将元素传递回回调函数

a.语法

被遍历的数组.forEach(function(当前数组元素,当前元素索引号){
//函数体
})

4.筛选数组filter方法(重点)

筛选数组复合条件的元素,并返回筛选之后元素的新数组

a.语法

const arr = [10, 20, 30]
const newArr= arr.filter(function (item, index) {return item >= 20})

四.深入对象

1.创建对象的三种方式

a.利用对象字面量创建对象

const obj={
name:'嘿嘿'
}

b.利用new Object创建对象

const obj=new Object({uname:'呵呵'})

2.利用构造函数构造

构造函数:是一种特殊的函数,主要用来初始化对象

使用场景:通过构造函数来快速创建多个类似的对象

a.约定

  • 命名以大写字母开头
  • 有"new"执行
//1.
function Pig(uname,age){
this.uname=uname//第一个是pig对象里面的属性,后一个是形参
this.age=age
}
new Pig('佩奇',6)//2.
const peppa=new Pig('佩奇')

3.实例成员&静态成员

a.实例成员

  1. 在实例对象中的属性叫实例成员
  2. 创建构造相同但值不同的对象
  3. 彼此独立互不影响

b.静态成员

构造函数的属性和方法称为静态成员

静态成员只能构造函数来访问

静态方法中的this指向构造函数

比如:Date.now()   Math.PI  Math.random()

http://www.dtcms.com/a/327984.html

相关文章:

  • 为什么神经网络的权重矩阵具有低秩特性?如何理解和解释?
  • [Robotics_py] 机器人运动模型 | `update`函数 | 微积分矩阵
  • 线性代数 · 矩阵 | 最小多项式
  • 有限元方法中的数值技术:行列式、求逆、矩阵方程
  • 企业高性能web服务器(1)
  • 腾讯云服务器账户转移操作详解
  • ip归属地批量查询脚本
  • vue2+elementUI实现园型动态步骤条小组件,带缩放功能
  • ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会
  • 基于STC8单片机的RTC时钟实现:从原理到实践
  • Cloud Computing(云计算)和Sky Computing(天空计算)
  • 自然语言处理关键库解析和使用方法- FuzzyWuzzy
  • kafka初步介绍
  • mysql登录失败 ERROR1698
  • Java零基础笔记15(Java编程核心:Stream流、方法中的可变参数、Collections工具类)
  • Ceph对象池详解
  • 数据分析专栏记录之 -基础数学与统计知识
  • js高阶-总结精华版
  • 《软件工程导论》实验报告一 软件工程文档
  • 跨界重构规则方法论
  • AI重构Java开发:飞算JavaAI如何实现效率与质量的双重突破?
  • pcl 按比例去除点云的噪点
  • 自动化运维实验
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)
  • 备份单表的方法
  • 工业相机镜头选型
  • HTTPS加密与私有CA配置全攻略
  • AI智能体平台大爆发,2025AI智能体平台TOP30
  • 【Unity3D实例-功能-下蹲】角色下蹲(二)穿越隧道
  • Python爬虫获取淘宝店铺所有商品信息API接口