ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

严格模式

2019-03-03 19:53:06  阅读:240  来源: 互联网

标签:use strict 作用域 模式 严格 报错


1. JavaScript中存在两种模式:正常模式和严格模式。

2. ES5新添加了严格模式,目的:

1)消除js语法的一些不合理、不严谨之处、减少一些怪异行为;

2)消除代码运行的一些不安全之处,保证代码运行的安全;

3)提高编译器效率,增加运行速度;

4)为未来新版本的js做好铺垫

3. 严格模式的标志:"use strict"。

4. 严格模式的两种调用方法

1)针对整个脚本文件

<script>
  //严格模式
  //将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。
  "use strict";
  console.log("这是严格模式。");
    
  //以上写法不利于文件合并,所以更好的做法是将整个脚本放在一个立即执行的匿名函数中
  (function () {
    "use strict";
    // some code here
  })();
</script>

<script>
  //正常模式
  console.log("这是正常模式。");
</script>

2)针对单个函数体

//将"use strict"放在函数体的第一行,则整个函数以"严格模式"运行。
function strict() {
  "use strict";
  return "这是严格模式。";
}

function notStrict() {
  return "这是正常模式。";
}

5. 严格模式和正常模式的语法和行为上的不同。

    5.1正常模式下,变量没有声明就赋值,默认是全局变量,而严格模式下,会直接报错。严格模式禁止这种用法,全局变量必须显示声明。

+ function () {
  "use strict"
  a = 1; //Uncaught ReferenceError: a is not defined
}()

+ function () {
  a = 1; //window.a
}()

    5.2 严格模式下,在某些情况只允许静态绑定。

1)禁止使用with语句,因为with语句无法在编译时就确定,属性到底归属哪个对象。

2)创建eval作用域

//禁止使用with
var v = 1;
var obj = {};
with(obj) {
	v = 2;
} // Uncaught SyntaxError: Strict mode code may not include a with statement
    
  //正常模式下,JS语言有两种变量作用域:全局作用域和函数作用域;
  //严格模式下会创建第三种作用域:eval作用域。
  +function(){
    //正常模式下,eval作用域取决于它所处的作用域
    console.log("正常模式")
    var a = 1;
    console.log(eval("var a = 3;a")); //3
    console.log(a); //3
  }()

  +function(){
     //严格模式下,eval语句本身就是一个作用域,不能再生成全局变量了,它所生成的变量只能用于eval内部
    "use strict"
    var a = 1;
    console.log(eval("var a = 3;a")); //3
    console.log(a); //1
   
  }()

    5.3 增强的安全措施

5.3.1 禁止this关键字指向全局对象

5.3.2 禁止在函数内部遍历调用栈

    5.4 禁止删除遍历

    5.5 显式报错

 1)正常模式下,对一个对象的只读属性赋值,不会报错,只会默默失败。严格模式下,将报错。

 2)严格模式下,对一个使用getter方法读取的属性进行赋值,会报错。

 3)严格模式下,对禁止扩展的对象添加新属性,会报错。

 4)严格模式下,删除一个不可删除的属性,会报错。

    5.6 重名报错

1)对象不能有重名的属性

2)函数不能有重名的参数

    5.7 禁止八进制的前缀为0的表示法

    5.8 arguments对象的限制

1)不允许对arguments赋值

2)arguments不再追踪参数的变化

3)禁止使用arguments.callee,无法在内部函数调用自身了

    5.9 函数必须声明在顶层,即严格模式只允许在全局作用域或函数作用域顶层声明函数。

    5.10 保留字作为变量名会报错。

标签:use,strict,作用域,模式,严格,报错
来源: https://blog.csdn.net/yf_forever/article/details/85265419

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有