this = undefined ?看完你就明白了

211 阅读1分钟

JavaScript 严格模式

严格模式详解
除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 提高编译器效率,增加运行速度;
  • 为未来新版本的Javascript做好铺垫。

1. this在严格模式下的表现

全局作用域中函数中的this,不会指向window,此时则是undefined。

2. es6 modules中隐式的使用严格模式

es6 modules中隐式的使用严格模式,所以也会出现this = undefined的情况。
参考资料

代码测试

// 严格模式下
<script>
    'use strict';
    
    ~function _() {
        console.log(this); // 输出undefined
    }();
</script>

// es6 modules中
<script type="module">
    console.log(this); // 输出undefined
    
    import { fn } from './outsideJs.js';
    fn();
</script>

// outsideJs.js
export var fn = function () {
    console.log(this);  // 输出undefined
}