js高级之变量进阶

变量可以说是js最基本的一个东西了,相信学过js的同学都知道js的变量大概分为Number 布尔 对象等等这些类型,那么今天我们来深入了解一下你所不知道的“变量”。
首先我们来看一个代码


QQ图片20190413120317.png

你们认为b和d分别输出的是什么呢?

思考时间....................

或许有同学会认为输出的是1和[1,2,3]
那么我们来看看结果


QQ图片20190413120507.png

结果却是1 [1,0,3]
b是1肯定比较容易理解,那么没有对d进行修改为什么会变化呢?
这里就需要对变量进行深入理解,js中变量分为基本变量和引用变量,其中number 布尔等这类是基本变量,它是存放在内存栈里面,就是说变量a指向的是1这个内容,将a赋值给b就将这个内容赋值给了b所在的内存栈,它们之间互不影响
而数组,函数这类引用变量是存放在内存堆里面,c存放的是指向内存堆的地址,将c赋值给d就是将地址给d,也就是说c和d现在是指向同一个内存堆里面的数组,改变c指向的数组,那么由于d指向的是同一个数组,d的内容也就会被改变了。

下面我们再来一道题

QQ图片20190413121158.png

这里输出的3个a分别是什么?

思考时间.....

或许有同学认为是1,1,2, 或者 1,2,2
那么我们来看看输出结果

[图片上传中...(QQ图片20190413121548.png-6db3a5-1555128955000-0)]


QQ图片20190413121324.png

结果是 1 undefined 2
1和2比较好理解,那么第二个为什么是undefined呢

这里我们就不得不谈到js的执行机制了
js中存在一个叫做变量声明提示的机制,
在执行js代码前,它会将所有代码扫描一边,其中将变量声明提升到变量作用域的最前面
也就是是说提升后代码变为了


QQ图片20190413121548.png

这样是不是一下就明白了
由于只定义了a却没赋值,所以第二个a就输出的是undefined

你可能感兴趣的:(js高级之变量进阶)