javaScript之‘严格模式’

举报
hw02441001 发表于 2020/07/30 19:57:06 2020/07/30
【摘要】 严格模式除了正常运行模式,ECMAscript5添加了第二种运行模式:‘严格模式’。顾名思义,这种模式使得javascript在更严格的条件下运行。严格模式的目的:消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新版本的JavaScript做好铺垫。严格模式的书写关键字为 "use ...

严格模式

除了正常运行模式,ECMAscript5添加了第二种运行模式:‘严格模式’。顾名思义,这种模式使得javascript在更严格的条件下运行。

严格模式的目的:

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

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

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

  4. 为未来新版本的JavaScript做好铺垫。


严格模式的书写

关键字为 "use strict". 写在哪个作用域下,在哪个作用域生效。注:尽量不要把严格模式写在全局。


严格模式的案例

  1. 声明全局变量时,必须加var

function show(){

num=10;

}

以上代码,在正常运行模式下,调用show函数可以强制声明num为全局变量。这种做法是不太容易接受的,尤其是对于有其他语言经验的同学来说,

这种做法是“错误”的。 但是在JavaScript中,以上代码可以执行。

加上严格模式后,代码如下

function show(){

"use strict"

num=10;

}

此时调用函数就会报错, 此时声明变量必须要用关键字var,而且只能为局部变量。

2.函数内重名属性

function show(a,a,b){

 return a+b;

}

show(10,20,30);

以上代码,在正常运行模式下, 结果返回为50。在show函数中,return语句中的a实际为20,

因为参数中第二个a会把第一个a的值覆盖。

加上严格模式后,以上代码就会报错,因为不允许出现重复的属性名,参数中两个a是不正确的。

3.arguments对象不允许被动态改变

我们先来简单说一下arguments这个特殊的对象。

在JS中,arguments实际上是当前函数的一个内置对象。所有函数都内置了一个arguments函数,

arguments对象中存储了所有传递过来的实参。

function show(num1.num2){

 num1=2;

console.log(arguments[0]);

}

show(1,2);

以上代码,在正常运行模式下,结果为2。虽然在传递参数的时候,arguments数组存储的值为1和2,但是在show函数内,又重新给num1赋值,arguments也随之改变。

加上严格模式后

function show(num1.num2){

"use strict"

 num1=2;

console.log(arguments[0]);

}

show(1,2);

上述代码中,arguments[0]存储的就是传递进来的1,内部改变不会影响arguments。

4.新增保留字:implements,interface,let,package,private,protected,public,static,yield。

严格模式总结

“严格模式”体现了JavaScript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它。




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。