发表于: 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这个框架有个大概认识了,主要是这个双向绑定很方便,指令之类的优点,也是很赞~



返回列表 返回列表
评论

    分享到