在js代码执行前,浏览器会有一个全局环境叫window,在window下分为俩个模块
一个为内存模块,一个为执行模块。
内存模块会找到所有带var与function的关键字
执行模块会一次从上到下查找
如果找到var 这个变量,就看他有没有赋值,如果赋值就是那个值
如果没有赋值就是undefined
如果没有找到这个变量,就是is not defined
作用域:浏览器给js的一个生存环境(栈内存)
作用域链:函数内部的变量被使用时,首先会在他的私有作用域下查找,
有没有这个变量,如果有就使用没有就向上查找,父级有
就使用父级的,父级没有就继续向上查找,知道找到window
window有就使用,没有就是is not defined
this:this也是js的一个关键字,它就是一个替代,指定一个对象去替代它
this又分为函数内的this与函数外的this:
函数内的this是指向行为发生过的主体
函数外的this是指向window
列如:function.yangxiaorong(){
consoloe.log(this)
}
杨.yangxiaorong 里边的杨就是这个函数的主体
function.yangxiaorong(){
consoloe.log(this)
}
yangxiaorong(window)
因为浏览器在执行js代码时候,在执行到yangxiaorong的时候,查找到变量的归属为window
函数内的this和函数在什么环境下定义都没有关系,跟自已的主体有关系
主体:就是看这个函数(方法)带不带点,如果有this就指向点前面的,如果没有this就指向window
自执行函数里的this都指向window
~function(){console.log(this)}()自执行
给元素一个方法,绑定方法事件,触发时就执行绑定的方法,方法中的this指向当前元素