Dennis Leung

前端小天才智多星班进修中

  • 主页
  • 干货储物柜
所有文章 关于我

Dennis Leung

前端小天才智多星班进修中

  • 主页
  • 干货储物柜

严格模式下的this指向

2020-06-14

面试的时候遇到的一道题:

1
2
3
4
5
6
7
8
var a = 10
var obj = {
a: 20,
say: () => {
console.log(this.a)
}
}
obj.say()

很明显这道题是对this还有箭头函数的考察,箭头函数的this是在声明的时候绑定的,因此这里搞清楚this的指向就行了。

在非严格模式下,这里的this指向全局环境(browser中的window,node中的global);严格模式下,为undefined。

然后试了一把,在开头加上"use strict";执行,原以为会报错,谁知道正常输出了10。。。wtf难道是严格模式没生效,在控制台source检查了 "use strict"; 是在文件最开头。于是把var a = 10改成a = 10,执行报错ReferenceError: assignment to undeclared variable a,看来严格模式是生效的。。。

继续做测试:

全文件严格模式:

1
2
"use strict";
console.log(this);// browser输出window,node输出global

IIFE严格模式:

1
2
3
4
(function () {
"use strict";
console.log(this); //undefined
})();

看来之前理解的 严格模式下this指向undefined 并不严谨。看了下webpack打包出来的也是使用IIFE严格模式。

总结:全局的获取的this还是指向全局环境,非全局作用域内的this指向才是undefined。

  • javascript
javascript中的那些类型隐式转换
287. Find the Duplicate Number
© 2023 Dennis Leung
Hexo Theme Yilia by Litten

粤公网安备 44030502007083号

粤ICP备2021020087号

  • 所有文章
  • 关于我

tag:

  • leetcode
  • 算法
  • 并查集
  • JavaScript
  • 干货储物柜
  • Yii
  • php
  • Python
  • http
  • html
  • HTML
  • CSS
  • hexo
  • javascript
  • hybrid
  • 网络安全
  • Apple Script
  • 爬虫
  • 微信公众号
  • css
  • 数据结构
  • 编译原理
  • 位运算
  • 干活储物柜
  • 移动开发

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

不思进取的前端开发攻城狮。
梦想是躺着也能拯救世界。