发表于: 2017-07-24 22:56:15
2 735
今天做了的事:
最近作为老学员的尊严受到了严重的挑衅!有时候建名问的问题我竟然回答不出来。。。
觉得不能当个菜狗子,所以趁着最近没有事,就从今天开始巩固一下js的基础。
今天看了内存空间,执行上下文和变量提升。
明天要做的事:
主要是沿着波同学的简书在结合高程往后研究
计划研究作用域链,闭包和this相关问题
今天遇到的问题:
1.内存空间:
一:
var a = 20;
var b = a;
b = 30;
二:
var m = { a: 10, b: 20 }
var n = m;
n.a = 15;
第一例是基础数据类型,保存在【变量对象】中。var b=a相当于新建一个变量b,然后将a的值付给b,所以改变b的值a是不变的。
第二例是引用数据类型,保存在【堆内存】中,且不能直接修改堆内存中的值,只能通过其保存在【变量对象】中的索引来擦做值。执行var n = m后,实际上是把m的索引赋给n,再去改变n的值,相当于改变n的【变量对象】中的索引对应的值,但是nm索引是一样的,所以mn相对应的值都会改变
2.变量提升:
打印结果a为undefined,foo()为2。
例子里面实际上函数声明和变量声明都会被提到当前执行函数的顶部,所以实际上的执行顺序为
所以a打印的时候尚未赋值,foo()却有值。
但是只有函数声明会被提升,函数表达式不会被提升。
感悟:
今天常哥生日,嗨!
评论