JavaScript 之严格模式

1、JavaScript中两种模式

正常模式和严格模式

2、ES5添加严格模式的目的

  1. 消除了JavaScript 语法的一些不合理,不严谨之处,减少了一些怪异行为。
  2. 消除代码运行的一些不安全之处,保证代码运行的安全。
  3. 提高编译器效率,增加运行速度。
  4. 禁用了在ECMAScripe的未来版本中可能会定义的一些语法,为未来新版本的JavaScript 做好铺垫,比如一些保留字如: class, export , extends , import , super 不能做变量名。

3、开启严格模式

3.1针对整个脚本文件
为整个脚本开启严格模式,需要在所有语句之前放一个特定语句“use strict”;(或’use strict’)

  <script>
        'use strict'
        //下面的js代码就会按照严格模式执行代码
    </script>

3.2针对单个函数体
将’use strict’放在函数体的第一行,则整个函数以“严格模式”执行。

 <script>
        function fn(){
            'use strict'
        //下面的js代码就会按照严格模式执行代码
        } 
    </script>

4、严格模式与正常模式的语法与行为上的不同

4.1严格模式下语法的变化
正常模式下,变量没有声明就赋值,打印是没有问题的,这是因为默认情况下变量是全局变量。然而在严格模式下,若变量没有声明便赋值是会报错的,因为严格模式禁用这种语法,要求全局变量必须先声明。并且在严格模式下我们不能随便删除已经声明过的变量

//正常模式下
num = 10;
console.log(num);    //正常显示 10

//严格模式下
 'use strict'
   //   num = 10;
   //  console.log(num);   //严格模式下未申明变量会报错          
   var num = 10;
   console.log(num);   //声明之后会正常显示 10
    delete num       //严格模式下删除已经申明的变量会报错

4.2 严格模式下this指向的变化
在全局作用域函数中this 指向 window 对象,但是在严格模式下全局作用域中函数的 this 是 undefind

	//平常模式下
     function fn(){
                console.log(this);     //打印结果为 window对象
            }
            fn()   
    //严格模式下
	function  fn(){
       'use strict'
       console.log(this);     //打印结果为 undefined
}         

以前构造函数时不加new 也可以调用,作为普通函数,这时 this 指向全局对象,但是在严格模式下,如果构造函数不加new 调用,this 会报错, new 实例化的构造函数指向创建的对象实例。

// An highlighted block
var foo = 'bar';//平常模式下
 function Stu(){
                this.name = 'anni'      //this指向window
            }
            Stu()     
            console.log(window.name);    //结果为anni
//严格模式下
 'use strict'
      function Stu(){
           this.name = 'anni'    
               }
           // Stu()     //严格模式下直接调用会报错,构造函数需要加 new 调用
        var stu = new Stu();     
        console.log(stu.name);  //结果打印  anni

在定时器中 this 还是指向 window

 'use strict'
  setTimeout(function(){
  console.log(this);     //this 依旧指向 wiondow
   },2000)

4.3 严格模式下函数的变化
平常模式下函数名如果是可以允许冲突的,但在严格模式下是不允许函数名冲突的

//平常模式下
 function sum(a,a){
      console.log(a+a);   //打印结果为 4 ,这是因为第一次将1赋值给了a之后,第二次又将2 赋值给了a 
      }
    sum(1,2);
//严格模式下
   function sum(a,a){
      console.log(a+a);  //报错
      }
    sum(1,2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值