js函数进阶

js函数进阶

1. 函数的定义和调用

1.1 函数的定义方式

  • 自定义函数(命名函数)

    function functionName(params) {codexxx}

  • 函数表达式(匿名函数)

    var fun = function(params) {codexxx}

  • new Function()

    var func = new Function(‘param1’, ‘param2’,…,’function’)


1.2 函数的调用方式

总结三种函数定义方式及其调用in js:

code


2. this

2.1 函数内的this

函数内的this指向:调用时才能确定,一般指向调用者

this

2.2 改变函数内的this指向

  • fn.call(context,arg1,arg2,…): 可以调用函数,又可以改变this指向,主要可以实现继承。
  • fn.apply(context,[arg1,arg2,…]): 也是可以调用函数,又可以改变this指向,主要区别是函数需要将参数作为数组传递
  • fn.bind(context,arg1,arg2,…): 不会调用函数,返回改变this指向后的新函数

this


3. 严格模式 strict mode

ES5的严格模式是采用具有限制性JavaScript变体的一种方式,相对正常的js语义做了一些更改,为未来新版本的js做铺垫。

严格模式的开启可以分为 为整个脚本开启严格模式为个别函数开启严格模式

在所有语句(为整个脚本)或者在函数体(为个别函数)之前放特定语句“use strict”;

3.1 严格模式下的变化

  • 变量规定: 变量必须先声明再使用,不允许删除已经声明的变量
  • this指向:正常的js中全局作用域函数的this指向window对象,严格模式下,全局作用域的函数this指向undefined
  • 函数变化: 函数不能有重名的参数

4. 高阶函数

高阶函数:对其他函数进行操作的函数(接收函数作为参数 或者 将函数作为返回值)

4.1 函数作为参数的情况

  • arr.map(callback(currentValue, index, array)): 生成一个新数组,不改变原始数组的值。其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
  • arr.reduce(callback(accumulator, currentValue, currentIndex,arr ),initialValue):对数组中的每个元素执行一个提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。 - 经常用于数组求和
  • arr.sort(): 用原地算法对数组的元素进行排序,并返回数组

reference: 【JS必知必会】高阶函数详解与实战 - 掘金 (juejin.cn)

5. 闭包

5.1 变量作用域

变量根据作用域的不同分为:全局变量和局部变量。注意:

  • 函数外可以使用全局变量
  • 函数内不可以使用局部变量
  • 当函数执行完毕,本作用域内的局部变量会销毁

那么如何从外部读取局部变量呢?

5.2 闭包的定义

闭包:是指有权访问另一个函数作用域中的变量的函数。(本质是个函数)

5.3 闭包的作用

延伸变量的作用范围

reference:深入理解JS闭包 - 掘金 (juejin.cn)

6. 深拷贝和浅拷贝

  • 浅拷贝shallow copy:只复制指向某对象的指针,而不复制对象本身,新旧对象共享一块内存。且浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用(地址)

    es6新增Object.assign(目标,原)可以实现浅拷贝

  • 深拷贝deep copy:复制并创建一个一模一样的对象,不共享内存,修改新对象不对影响旧对象。每一层的数据都会进行拷贝。


js函数进阶
http://example.com/2023/06/22/js函数进阶/
Author
John Doe
Posted on
June 22, 2023
Licensed under