关于堆栈:
栈:后进先出;
堆:堆数据结构类似书架的结构;跟进入先后无关系;是一种无序序列的集合;
队列:是指js中的事件执行顺序;这个和自行的上下文有关系;就是在函数执行过后就被回收;先进先执行;执行过等待被回收;
读取后的一下看法;js单线程;按照从上到下的顺序执行;在执行到某个地方后就;就是出现栈的存储操作;首先需要提的就是代码分为编译阶段和执行阶段;在编译的阶段确定执行的上下文;创建变量;确定执行上下文;创建作用域;确定this的执行;
执行阶段;变量赋值;函数调用;执行其他代码;然后结束后就是等待回收;
this的指向方面;是在函数被调用的时候确定;一般都说谁调用this指向谁;
在全局中很明确this是指向window的;所以函数在执行的时候实际上是调用window.变量;
函数中的this;
var a=0;
function foo(){
console.log(this.a);
};
foo();
这个比较好理解;再往下看一个例子;
var a=20;
function fn(){
function foo(){
console.log(this.a);
};
foo()
};
fn();//这个foo中的thi还是指向window的;
这个需要一定的解释;
在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。
如果调用者函数,被某一个对象所拥有,那么该函数在调用时,
内部的this指向该对象。如果函数独立调用,那么该函数内部的this,
则指向undefined。但是在非严格模式中,当this指向undefined时,它会被自动指向全局对象。
通过new操作符调用构造函数,会经历以下4个阶段。
创建一个新的对象;
将构造函数的this指向这个新对象;
指向构造函数的代码,为这个对象添加属性,方法等;
返回新对象。