前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS:this、hoisting、precedence

JS:this、hoisting、precedence

作者头像
WEBJ2EE
发布2019-07-19 12:04:23
4220
发布2019-07-19 12:04:23
举报
文章被收录于专栏:WebJ2EEWebJ2EE

这一次,我将总结 JS 中几个容易出错的点:

提升(hoisting); this 绑定; 运算符优先级与结合性;

1. 提升(hoisting)

关键点:

  • JS 引擎在执行代码之前会对代码进行编译,这一阶段会优先处理包括变量、函数在内的所有声明(提升就发生在这个时候)。
  • 只有声明本身会被提升,而赋值或其他运行逻辑会留在原地;
  • 函数声明变量声明都会被提升。函数会首先被提升,然后才是变量;
  • 每个作用域都会进行提升操作。

示例1:

示例2:

示例3:

示例4:

2. this 绑定

this 是在函数被调用时发生的绑定

它指向什么完全取决于函数在哪里被调用

判定规则(优先级):

  1. 函数是否在 new 中调用(new 绑定)?如果是的话 this 绑定的是新创建的对象;(例如:new foo()
  2. 函数是否通过 call、apply 或 bind 调用?如果是的话,this 绑定的是指定的对象;(例如:foo.call(obj2)
  3. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this 绑定的是那个上下文对象;(例如:x.y.z.foo()
  4. 如果都不是的话,使用默认绑定。严格模式下绑定到 undefined,否则绑定到全局对象 window;(例如:foo()
  5. 特别注意:箭头函数不适用上述四条规则,它会继承外层函数调用的 this 绑定。

示例1:

示例2:

示例3:

示例4:

示例5:

3. 运算符优先级与结合性

A. 什么是运算符优先级?

运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。

B. 什么是结合性?

结合性决定了拥有相同优先级的运算符的执行顺序。

优先级、结合性小题目1:

优先级、结合性小题目2:

优先级、结合性小题目3:

参考:

《你不知道的 JavaScript(上卷)》 《深入理解 ES6》 《ES6 标准入门》 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebJ2EE 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档