##严格模式下需要注意的点:

全局变量显式声明
直接调用函数this指向undefined
delete删除全局变量会报错
对象不能有重名的属性
函数不能有重名的参数
对arguments做了限制

    1. 不允许对arguments赋值2. arguments不再追踪参数的变化

函数必须声明在顶层
新增了保留字
implements, interface, let, package, private, protected, public, static, yield


开启严格模式的好处:

严格模式 “strict mode”
使用严格模式可以消除js语法上不合理,不严谨,减少怪异的行为

开启严格模式:

  1. 在一对script标签的开始使用字符串 “use strict”
  1. 在函数中使用字符串 ‘use strict’

在严格模式下,使用以下的注意点:

1.直接调用函数,函数中的this就不指向window了,而是undefined
//非严格模式下,this指向window
function fn(){console.log(123,this)//打印出:123,window};fn();//严格模式下,this指向,写谁就是谁
function fn1(){"use strict"//严格模式console.log(123,this)//打印出:123,undefinedde };fn1();
2.使用call第一参数改变this指向,在es5中指向是window,在严格模式下执行传入的第一个参数
//call/apply方法一旦使用都可以直接调用函数;
//非严格模式下,this指向window
function fn(){console.log(123,this)};fn.call();//严格模式下,this指向,写谁就是谁
function fn1(){"use strict"console.log(123,this)//打印出:123,this;如果不给call传参数,this是undefined};fn1.call(null);
3. 形参不能重复声明,重复声明会报错
//非严格模式下,后声明的a覆盖之前的,
function fn5(a,a){return a*a;
};
console.log(fn5(2,3));//打印出:9//严格模式下,this指向,写谁就是谁
function fn4(a,a){"use strict"return a*a;};fn4(2,3)//报错:(Uncaught SyntaxError: Duplicate parameter name not allowed in this context)
4. arguments不能追踪变化
// 当形参发生变化时候,arguments会追踪变化
// 当开启严格模式之后,arguments就不在追踪形参变化了
// arguments是实参的集合(类数组)//非严格模式下:
function fn8(a){a=10;console.log(arguments)//打印出来的是10;在函数体内被改变过后的值;
};
fn8(3);
//严格模式下,形参不要重复定义,否则会报错
function fn9(a){"use strict"a=10;//?????写在开启严格模式之前,打印出来的还是10;console.log(arguments)//打印出来的是3;也就是调用时传进来的实参的值
};
fn9(3);
5. 不允许对arguments赋值
//非严格模式下
function fun1(a,b){arguments = 10;console.log(arguments)//打印出10;可以赋值;
};
fun1(1,2);
//严格模式下:
function fun2(a,b){//"use strict"arguments = 10;console.log(arguments)//不允许赋值,直接报错:Uncaught SyntaxError: Unexpected eval or arguments in strict mode
};
fun2(1,2);
6. 声明变量必须显式的使用var let const来声明变量,不用关键字声明会报错
function fun3() {"use strict"aini = 'dada';
};
fun3();//直接报错:Uncaught ReferenceError: aini is not defined  at fun3;
7. 试图用delete删除变量会报错
//直接报错:Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
(function (){"use strict"var abc = 'hhhhh';delete abc;
})();
8. 函数声明必须在顶层或函数作用域中,在非函数的代码块中会报错

注:不能再for,if,while语句中声明函数;

//非严格模式下
if(false){function fat(){console.log(1)}};console.log(fat)//打印undefined,为true时,打印fat这个函数;//严格模式下,不能再for,if,while中声明函数
"use strict"
if(true){function fat1(){console.log(1)}
};
fat1();//直接报错:Uncaught ReferenceError: fat1 is not defined

参考:[http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
https://developer.mozilla.org/enUS/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode][1]

严格模式 use strict相关推荐

  1. JavaSript严格模式use strict详解

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

  2. Javascript 严格模式use strict详解

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

  3. JavaScript严格模式 use strict

    1.在严格模式下,变量必须显示声明(var/let/const),直接给变量赋值,不会隐式创建全局变量 (function(){//非严格模式a = 10;console.log(a); //10 } ...

  4. JavaScript 严格模式(use strict)

    使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增. 它不是一条语句, ...

  5. Hive笔记之严格模式(strict mode)

    Hive有一个严格模式,在严格模式下会对可能产生较大查询结果的语句做限制,禁止其提交执行. 一.切换严格模式 查看当前的模式: hive> set hive.mapred.mode; hive. ...

  6. 2、ES5的严格模式use strict

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是严格模式: 除了正常运行模式(混杂模式),ES5还添加了第二种运行模式:"严格模式"(stric ...

  7. JavaScript进阶【二】JavaScript 严格模式(use strict)的使用

    版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...

  8. 点位拍照打卡完成任务小程序JavaScript 严格模式(use strict)

    </head> <body><h2>全局 "use strict" 声明.</h2> <p>浏览器按下 F12 开启调试 ...

  9. JS中的严格模式(Strict Mode)

    什么是严格模式? 严格模式是ECMAScript5的新特性,它是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离"马虎模式/稀松模式/懒散模式"(sloppy ...

最新文章

  1. 从车联网到工业智联网
  2. gRaphael——JavaScript 矢量图表库:两行代码实现精美图表
  3. vue require css html,requirejs vue vue.router简单框架
  4. 手写一个简单的WinForm程序(2)
  5. Java EE启示录
  6. 网管型工业交换机和 非网管型工业交换机的优缺点
  7. 电脑如何进入bios模式_华硕笔记本电脑开机自动进入BIOS界面怎么办?
  8. 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省
  9. 浅谈帆软报表的权限授权,以便于二次开发
  10. 解压文件win10自动删除
  11. 基于Vivado和Ego1的密码锁设计
  12. PHP生成二维码与识别二维码,jq生成二维码
  13. 在Linux上恢复误删除的文件或目录
  14. 优雅的git commit
  15. 使用JAVA调用热敏打印机接口实现打印功能
  16. 数据库SQL经典面试题详解
  17. linux使用grep查找文件内容,Linux中使用grep命令搜索文件名及文件内容的方法
  18. CSS优先级权重练习
  19. CISSP 第五章 物理和环境安全
  20. 【数据结构】kd树实现,范围查询,邻近查询笔记【1】2d树的构造

热门文章

  1. centos安装baidupcs
  2. 优酷暗黑模式(四):设计标准化的技术实现
  3. 安装使用简单的linux,Ubuntu 14.04下autojump的安装和简单使用
  4. 贝莱德伦敦分部面试 - Java岗位
  5. 【目标检测】(9) 改进PANet特征提取金字塔,附Tensorflow完整代码
  6. 【python中文乱码】git bash终端运行python文件中文乱码的问题
  7. HP暗影精灵二代的静音键(F5)指示灯不亮的解决方法
  8. python(十四)--Django学习快速入门
  9. 代码静态检测工具cppcheck简介
  10. PyQt5 QTdesigner python 爬虫+简单界面