全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

内存角度理解回调函数

发布时间:2022-06-02 11:31:00
发布人:wjy

关于回调函数对于初学者来说是个比较难以理解的知识点。本文以内存(只以堆栈)的角度来理解回调函数

变量的内存情况

在js中数据类型的划分可以分为基本类型与引用类型。两种类型在内存中的表现形式是不一样的

内存角度理解回调函数

1、基本类型

```js
//栈区创建一个变量 记录的值为10
var num = 10;
//栈区创建一个n变量 并且赋值为num变量的值
var n = num;
//将栈区n变量的值修改为20
n = 20;

console.log(num)
```

1

2、引用类型

```js
//栈区创建一个arr变量 将具体的元素值保存到堆区  并且在arr变量中的值记录为堆区的地址
var arr = [1,2];
//栈区创建一个newArray的变量 并且将 arr在栈区存储的地址赋值给newArray
var newArray = arr;
//顺着newArray记录的地址值修改数据
newArray[0] = 100;
console.log(arr);// [100,2]
```

2

函数的情况

函数也是一种引用类型,所以创建一个函数就与创建数组在内存的情况类似,当创建一个函数时,会在栈区创建一个变量,然后将函数代码相关的信息存储到堆区,最后将堆区的地址赋值给栈区的变量保存

```js
function fn(){
    console.log('fn')
}
// 创建函数 就是创建了一个函数名称的同名变量。并且值指向"堆区”的地址(声明式与赋值式一致).在堆区中会保存代码片段相关的信息
//上面的代码等价于 var fn = function(){consoel.log('fn')}
console.log(fn)

// 当函数调用时,系统可以通过"变量名称/函数名称" 找到函数代码在堆区的地址。也就是可以改写形式为“内存地址()”,()就是表示要将代码运行起来
fn()
```

3

自调用匿名函数

```js
(function(){
    console.log('123456')
})();
/*

 function(){
     console.log('123456')
 }
 就是一个函数表达式,本身就可以得到一个内存地址   例如该内存地址等于0X111 ,内存地址中存储着函数的代码信息
 所以上面的代码可以理解为(0X111)() 这种形式,这种形式与 赋值式的函数时是一直 所以最后可以调用函数
 
*/
```

回调函数

回调函数就是将函数作为作为另外一个函数调用的参数进行传递。其本质也只是传递了一个内存地址

1、函数参数传递引用类型

```js
function fn(a){
    //3、当函数调用时 会隐藏的进行 var a = arr的操作 所以将arr变量存储的地址赋值给了a变量  所以a就是一个地址  因为a变量存储的值对应的是函数所以最终时候可以通过a[下标]访问元素的
    console.log(a)
}
//1、栈区创建一个arr变量 赋值为堆区中保存数据的地址
var arr = [1,2,3]
//2、调用函数并且传递arr变量的值  传递的是一个内存地址
fn(arr)
```

2、将函数作为参数传递

```js
//1、创建一个fn变量 并且赋值为堆区中的地址
function fn(a){
    //4、执行函数时进行形参赋值 var a = callback  所以将callback变量的地址赋值给了a 由于a是一个函数 所以可以()
    a()
}
//2、创建callback 并且赋值为堆区中的地址
var callback  = function(){
    console.log('回调函数');
}
//3、调用fn函数 并且传递参数callback的地址
fn(callback)
```

4

更多关于“web前端培训”的问题,欢迎咨询千锋教育在线名师。千锋已有十余年的培训经验,课程大纲更科学更专业,有针对零基础的就业班,有针对想提升技术的提升班,高品质课程助理你实现梦想。

相关文章

抖音小店在哪儿找货源卖

抖音小店在哪儿找货源卖

2023-10-08
开通抖音小店怎么挂商品链接

开通抖音小店怎么挂商品链接

2023-10-08
抖音小店怎么设置客服号码登录不了

抖音小店怎么设置客服号码登录不了

2023-10-08
抖音小店资质变更后账户钱怎么没了

抖音小店资质变更后账户钱怎么没了

2023-10-08

最新文章

上海物联网培训一般费用多少

上海物联网培训一般费用多少

2023-09-12
北京物联网培训费用大概多少

北京物联网培训费用大概多少

2023-09-12
北京物联网培训需要费用高不高

北京物联网培训需要费用高不高

2023-09-12
上海效果好的物联网培训费用高吗

上海效果好的物联网培训费用高吗

2023-09-12
在线咨询 免费试学 教程领取