发表于: 2017-04-15 23:17:44
1 1272
1.今天完成的事情
1.今天早上评论师弟日报的时候,对师弟问到的闭包不是很清楚,于是去看明月师姐提供的大神的一篇讲闭包和作用域的文章,由于不了解数据储存机制(堆,栈),垃圾回收机制,执行上下文,变量对象和活动对象,看不大懂。。。于是又去看这个大神前面讲这些的文章(http://www.jianshu.com/p/cd3fee40ef59)
(1).栈空间是先进先出,后进后出,有顺序的,而堆是无序的,根据属性来取值,都是引用存储对象中的值,js文件大部分都是存储在堆里面的。
var a = 20;var b = a;
b = 30;// 这时a的值是多少?
变量对象,这种题目中a的值就还是20,给b赋值之后,其实b和a就没啥关系了,相当于创建了两个实例。但是
var m = { a: 10, b: 20 }var n = m;
n.a = 15;// 这时m.a的值是多少
引用类型如果是对象的话,n和m同时指向一个{a:10,b:20}的对象,改变了n.a相当于改变了这个对象中的a属性。
(2).然后大概看了下执行上下文,第一步全局上下文入栈可执行代码执行,第二步需要执行的函数,该函数入栈,执行其中可执行的代码,遇到内部嵌套函数,嵌套函数执行再入栈...全局最后出栈。
(3).变量对象和活动对象,这两个其实就是一个对象,只是出于程序执行不同的生命周期,创建阶段先函数再变量(function声明优先于var,argument最先),且变量不可调用,执行阶段才能调用,明白这个,下面这个就好理解了。
console.log(a);//undefined
console.log(b);//会在控制台打印出function b()的具体内容
var a = 20;
function b() {
alert("hello")
}
2.看了下angular的官方文档,对着码代码,了解了一些angular的强大。
2.明天要做的事情
继续学习angular,做完任务6(下雨的话),不下雨就去川大打球~
3.遇到的问题
var fn = null;
function foo() {
var a = 2;
function innnerFoo() {
console.log(c); // 在这里,试图访问函数bar中的c变量,会抛出错误
console.log(a);
}
fn = innnerFoo; // 将 innnerFoo的引用,赋值给全局变量中的fn
}
function bar() {
var c = 100;
fn(); // 此处的保留的innerFoo的引用
}
foo();
bar();
写到抛出C变量会报错,fn不是已经是全局变量了么?为啥还是无法执行,原来是fn虽然全局了,但是作用域确没有变化,这点就比较恶心了。
4.收获
1.了解了数据储存机制(堆,栈),垃圾回收机制,执行上下文,变量对象和活动对象。
2.开始照着angular官方文档码代码,码了一会了,金超师兄也帮我大概介绍了一下angular,对angular这个框架有个大概认识了,主要是这个双向绑定很方便,指令之类的优点,也是很赞~
评论