选项卡之闭包
1.元素,元素节点(类数组集合)都开辟了堆内存
2.自定义属性来解决this.myIndex
3.利用闭包解决
分析如下:
1.全局作用域 栈内存
变量存储 值存储
navList AF0
变量提升
代码执行
navList = document.querySelectAll('#navBox li');
i=0 i<3
navListp[0].onclick=function(){...};
i=1 i<3
navListp[i].onclick=function(){...};
...
i=3 i<3 不成立(循环结束),全局的i变为3
2.开辟AF0 堆内存
=> navList
NodeList(3) [li, li, li.active]
0: li
1: li
2: li
.activelength: 3
__proto__: NodeList //类数组集合
3.三个li对象,每一个对象的onclick都赋值了一个函数(共创建三个函数),每一个li对象开辟一个BF0 堆内存
id:
style:
className:
onclick: CF0
4.点击事件绑定的函数CF0 堆内存
“changeTab(i);”
5.点击了第一个li,执行CF0 => 私有作用域 栈内存
变量存储 值存储
形参赋值 & 变量提升
代码执行
changeTab(i) //i不是私有变量,向上级作用域(全局)查找,全局的i=3 ***但是我们想传递的是3
###This
函数执行的主体(不是上下文):意思就是谁把函数执行的,那么主体就是谁
THIS非常不好理解,以后遇到this,想一句话:“你以为你以为的就是你以为的”
- 1.给元素的某一个事件绑定方法,当事件触发方法执行的时候,方法中的this是当前操作的元素本身
- 2.如何确定执行的主体(this)是谁?当方法执行的时候,我们看方法前面是否有点,没有点this是window或者undefined;有点 . 点前面是谁this就是谁
var name = '前端博客';
function fn(){
console.log(this.name);
}
var obj = {
name :"你好,时间",
fn:fn
};
obj.fn(); //=> this:obj
fn(); //=> this:window (非严格模式,严格模式下是underfined)
window.fn()把window.省略了
(function(){
//自执行函数中的this是window(不严格模式)或者undefined(严格模式)
})
思考:
//=> hasOwnProperty方法中的this:ary._proto_._proto_
ary.proto.proto.hasOwnProperty()