一些方法及其他记录

一、闭包

简单理解就是在函数内部使用外层函数的变量。
从代码形式上看闭包是一个做为返回值的函数。

<script>
  function foo() {
    let i = 0;

    // 函数内部分函数
    function bar() {
			console.log(++i);
    }

    // 将函数做为返回值
    return bar;
  }
  
  // fn 即为闭包函数
  let fn = foo();
  
  fn(); // 1
</script>
  • 可以扩大变量的作用范围

  • 闭包本质仍是函数,只不是从函数内部返回的 闭包能够创建

  • 外部可访问的隔离作用域,避免全局变量污染 过度使用闭包可能造成内存泄漏

    注:回调函数也能访问函数内部的局部变量。

二、函数的参数

动态参数

arguments 是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参。

<script>
  // 求生函数,计算所有参数的和
  function sum() {
    // console.log(arguments)
    let s = 0
    for(let i = 0; i < arguments.length; i++) {
      s += arguments[i]
    }
    console.log(s)
  }
  // 调用求和函数
  sum(5, 10)// 两个参数
  sum(1, 2, 4) // 两个参数
</script>

arguments是一个伪数组,用于动态的获取传入的实参。

剩余参数

使用...展开运算符,在函数形参时使用,用于获取多余的实参

<script>
  function config(baseURL, ...other) {
    console.log(baseURL) // 得到 'http://baidu.com'
    console.log(other)  // other  得到 ['get', 'json']
  }
  // 调用函数
  config('http://baidu.com', 'get', 'json');
</script>

...是一个真数组,箭头函数中没有 arguments,只能使用 ... 动态获取实参。

三、this

  • this : 谁调用我,我就指向谁
  • 普通函数 函数名() : window
  • 对象方法 对象名.方法名() : 对象
  • 构造函数 new 函数名() : new创建的实例对象

四、call apply bind区别

  • 共同点:都可以修改this,第一个参数都是修改的this
  • 不同点:
    1、、传参方式不同:call是逐一穿参,apply是数组/伪数组传参 call(修改的this,参数1,参数2…)、apply(修改的this,数组/伪数组)
    2、执行机制不同:call和apply会立即执行函数,bind不会立即执行。

五、一些方法

Object

静态方法
Object.assign静态方法创建新的对象
Object.keys静态方法获取对象中所有属性
Object.values表态方法获取对象中所有属性值

Array

实例方法
forEach用于遍历数组,替代 for 循环 (重点)
filter过滤数组单元值,生成新数组(重点)
map迭代原数组,生成新数组(重点)
join数组元素拼接为字符串,返回字符串(重点)
find查找元素, 返回符合测试条件的第一个数组元素值,如果没有符合条件的则返回 undefined(重点)
every检测数组所有元素是否都符合指定条件,如果所有元素都通过检测返回 true,否则返回 false(重点)
some检测数组中的元素是否满足指定条件 如果数组中有元素满足条件返回 true,否则返回 false
concat合并两个数组,返回生成新数组
sort对原数组单元值排序
splice删除或替换原数组单元
reverse反转数组
findIndex查找元素的索引值

包装类型
String

实例方法
split(‘分隔符’)用来将字符串拆分成数组(重点)
substring(需要截取的第一个字符的索引[,结束的索引号])用于字符串截取(重点)
startsWith(检测字符串[, 检测位置索引号])检测是否以某字符开头(重点)
includes(搜索的字符串[, 检测位置索引号])判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false(重点)
toUpperCase用于将字母转换成大写
toLowerCase用于将字母就转换成小写
indexOf检测是否包含某字符
endsWith检测是否以某字符结尾
replace用于替换字符串,支持正则匹配
match用于查找字符串,支持正则匹配

注:String 也可以当做普通函数使用,这时它的作用是强制转换成字符串数据类型。
Number

实例方法
toFixed用于设置保留小数位的长度

六、深拷贝 浅拷贝

  • 首先浅拷贝和深拷贝只针对Object、Array这样的复杂对象。

  • 浅拷贝只复制一层对象的属性,深拷贝则是复制了所有的层级。

  • 对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会 改变,而深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值