常见问题的总结

8 篇文章 0 订阅
1、let和var的区别
  • let不存在变量提升
  • let不允许重复声明
  • let在全局下声明的变量只是全局变量,和全局对象GO没有任何关系;而var在全局下声明的的全局变量,也相当于给全局对象GO设置了对应的属性,而且存在映射关系
  • let解决了typeof检测没有声明过的变量的时候,结果是undefined而不是报错的暂时性死区问题
  • let会产生一个块级私有作用域
2、什么是闭包,闭包的作用以及优缺点
  • 闭包:函数执行形成的私有上下文,即能保护里面的私有变量不受外界干扰,也能在当前上下文中储存一些信息(前提:形成的上下文不销毁),上下文的这种保存和保护机制,就是闭包机制。
  • 作用:
    • 1、保存 :在某些需求中,我们经常需要形成一个闭包,储存一些值(且不能销毁),这样来供后面的程序运行使用(例如:惰性函数、柯理化函数、compose函数等JS高阶编程技巧中,就是基于闭包的保存机制实现的)
    • 2、保护:在真实项目中,团队协作开发(或者封装公共的组件和类库),为了避免全局变量的污染,我们每个人都会把自己的代码放到闭包中保护起来
  • 优点即作用
  • 缺点:因为闭包会产生不销毁的上下文,这样导致栈/堆内存消耗过大,有时候也会导致内存泄漏等,影响页面的运行性能,真实项目中要合理利用闭包。
3、自执行函数具名化
  • 一般情况下,自执行函数都是匿名函数,但是当给其设置成为具名函数以后:
    • 设置的函数名只能在函数的内部上下文中使用(和外界变量没有联系),相当于当前私有上下文中的一个私有的变量(类似但是不是私有变量)
    • 不能修改这个函数名
    • 可以重新声明这个变量的方法修改它的值(相当于我们自己主动声明的优先级会很高,告诉浏览器,以我们自己声明的为主)
    • 具体的说明可以参考这里的一些信息。
4、THIS

EC(执行上下文):当前代码执行的环境

  • 全局执行上下文
  • 私有执行上下文(函数执行)
  • 块级作用域(let/const…)

this:执行主体(谁把这个函数执行的)
三四而后行:函数的执行主体是谁,和在哪定义的,以及在哪执行的都没有必然的联系 “你以为你以为的就是你以为的”
THIS:执行主体是对象数据类型的(特殊情况:null/undefined)

  • 1.给元素的某个事件行为绑定方法,当行为触发,方法执行的时候,方法中的THIS “一般” 都是当前元素本身
// IE6~8低版本浏览器中,基于attachEvent实现DOM2事件绑定,事件触发,方法执行,方法中的THIS不是元素本身了,而是window
box.attachEvent('onclick', function () {
	console.log(this === window); //=>true
});
  • 2.方法执行,看方法前面是否有“点”,有“点”,“点”前面是谁,THIS就是谁;没有“点”,THIS一般指向的是window/undefined,在严格模式(use strict)下就是undefined。
5、函数执行如果声明了形参,那么引入实参时候如果是一个变量先看是不是全局变量,如果是的话就把全局变量的值带进去;如果没有形参那就不管它,是存放在arguments属性里,在作用域和变量提升阶段没什么作用(纯属个人的瞎比理解,方便做题时思考)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值