ES6 —— 严格模式

简介: ES6 —— 严格模式

一、什么是严格模式

在严格的条件下允许 JS 代码。

消除了 JavaScript 语法的一些不合理、不严谨之处,减少了一些怪异行为。

提高编译器效率,增加运行速度。

禁用了在 ECMAScript 的未来版本中可能会定义的一些语法,为未来新版本的 JavaScript 做好铺垫。比如一些保留字,如:class、enum、export、extends、import、super不能做变量名。

二、开启严格模式

严格模式可以应用到整个脚本或个别函数中。因此在使用时,我们可以将严格模式分 为脚本开启严格模式 和 为函数开启严格模式 两种情况。

  1. 为脚本开启严格模式,需要在所有语句之前放一个特定语句 "use strict"; 或者 'use strict';
  'use strict';
  1. 为函数开启严格模式
  // 此时只是给fn函数开启严格模式
    function fn(){
        'use strict'
        // 下面的代码按照严格模式执行
    }
    function fun(){
        // 里面还是按照普通模式执行
    }

三、严格模式中的变化

  1. 在正常模式下,如果一个变量没有声明就赋值,默认是全局变量。严格模式下禁止这种写法,变量必须先声明,再使用。
  'use strict'
    num = 1

43b7d683d7664d36bcb3af9d72b8f0d6.png

  1. 不能随意删除已经声明好的变量
  'use strict'
    let num = 8
    delete num

b7e9ebc598ce44a4b93d040b9da45f46.png

  1. 在严格模式下全局作用域中函数的 this 是 undefined。
  'use strict'
    function fn(){
        console.log(this)
    }
    fn() //undefined
  1. 以前构造函数不加 new 也可以调用,当普通函数,this 指向全局对象。
  function Star(){
        this.sex = '男'
    }
    Star()
    console.log(window.sex) //男

严格模式下,如果构造函数不加 new 调用,this 指向的是 undefined,如果给它赋值,会报错。

  'use strict'
    function Star(){
        this.sex = '男'
    }
    Star()
    console.log(window.sex)

78b24afe13ed4340b9a9950154fba53a.png

new 实例化的构造函数指向创建的对象实例。

  'use strict'
    function Star(){
        this.sex = '男'
    }
    let a = new Star()
    console.log(a.sex) //sex
  1. 定时器 this 还是指向 window
  'use strict'
    setTimeout(function(){
        console.log(this)
    }, 100)

2670f19ca0aa49aea3a9c91af89bea84.png

  1. 事件、对象还是指向调用者。

四、严格模式中函数的变化

  1. 函数不能有重名的参数。
  //非严格模式下 后面的值覆盖了前面的,但能执行
  function fn(a, a){
        console.log(a + a)
    }
    fn(1, 2) //4
    //严格模式下 函数不能有重名的参数
    'use strict'
    function fn(a, a){
        console.log(a + a)
    }
    fn(1, 2)

a666f17be6f6481688504af0617616ef.png

  1. 函数必须声明在顶层。因为块级作用域,不允许在非函数的代码块内声明函数。(不允许在 if判断 和 for循环 中声明函数)
相关文章
|
4月前
|
JavaScript 前端开发
ES6 块级作用域
ES6 块级作用域
|
23天前
|
安全 JavaScript 前端开发
和为严格模式
和为严格模式
|
3月前
|
JavaScript 前端开发
ES6 函数
ES6(ECMAScript 2015)是 JavaScript 的一个重要版本,它引入了许多新的特性和语法。其中,函数是 ES6 的一个重要组成部分,它提供了许多新的函数语法和特性,如箭头函数、函数参数默认值、函数解构赋值等。
23 8
|
5月前
|
存储 前端开发 JavaScript
ES6语法
ES6语法
42 0
|
JavaScript 前端开发 安全
为什么使用严格模式
为什么使用严格模式:
48 0
严格模式的限制
严格模式的限制
34 0
|
JavaScript
ES 6 块级作用域
ES 6 块级作用域
44 0
ES 6 块级作用域