专栏首页WebJ2EEJS:this、hoisting、precedence

JS:this、hoisting、precedence

这一次,我将总结 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

本文分享自微信公众号 - WebJ2EE(WebJ2EE)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【前端】:变量提升、this绑定、 优先级与关联性

    Conceptually, for example, a strict definition of hoisting suggests that variabl...

    WEBJ2EE
  • 设计模式——状态模式

    有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型...

    WEBJ2EE
  • Fetch:新一代Ajax API

    一直以来,我们使用的Ajax技术,实际是由各浏览器的XMLHttpRequest(XHR)对象实现。但由于XHR接口难用而且落后(不能Promise),所以实际...

    WEBJ2EE
  • squid代理http和https方式上网的操作记录

    背景: 公司IDC机房有一台服务器A,只有内网环境:192.168.1.150 现在需要让这台服务器能对外访问,能正常访问http和https请求(即80端口和...

    洗尽了浮华
  • [系列] - go-gin-api 路由中间件 - 捕获异常(四)

    上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常。

    新亮
  • Asp.net+Vue2构建简单记账WebApp之三(使用Vue-cli构建vue.js应用)

    易兒善
  • 新金融崛起迅速,文化众筹或将发生本质改变

    孟永辉
  • 用WordPress搭建个人网站(3)

    叶应是叶
  • 小程眼里的微服务

    最近一直在研究微服务有了一点小小的成果,前段时间给公司部门同事做了分享,在此将ppt发出来与大家分享。

    小程故事多
  • 用 Go 写一个轻量级的 ssh 批量操作工具

    大家都知道 Ansible 是功能超级强大的自动化运维工具,十分的高大上。太高大上了以至于在低端运维有点水土不服,在于三点:

    李海彬

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动