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:

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

2.2 改变函数内的this指向
- fn.call(context,arg1,arg2,…): 可以调用函数,又可以改变this指向,主要可以实现继承。
- fn.apply(context,[arg1,arg2,…]): 也是可以调用函数,又可以改变this指向,主要区别是函数需要将参数作为数组传递
- fn.bind(context,arg1,arg2,…): 不会调用函数,返回改变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函数进阶/