JS系列:选项卡之闭包

32 篇文章 0 订阅
12 篇文章 0 订阅
本文探讨了JavaScript中实现选项卡时如何利用闭包解决this问题。讲解了元素和元素节点在堆内存的分配,以及通过自定义属性处理this.myIndex。还深入分析了this的含义,指出在事件绑定中,this指向触发事件的元素,并提供了判断this主体的方法。最后提出了一个关于hasOwnProperty方法的思考题。
摘要由CSDN通过智能技术生成

选项卡之闭包

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值