严格模式 use strict
##严格模式下需要注意的点:
全局变量显式声明
直接调用函数this指向undefined
delete删除全局变量会报错
对象不能有重名的属性
函数不能有重名的参数
对arguments做了限制
1. 不允许对arguments赋值2. arguments不再追踪参数的变化
函数必须声明在顶层
新增了保留字
implements, interface, let, package, private, protected, public, static, yield
开启严格模式的好处:
严格模式 “strict mode”
使用严格模式可以消除js语法上不合理,不严谨,减少怪异的行为
开启严格模式:
- 在一对script标签的开始使用字符串 “use strict”
- 在函数中使用字符串 ‘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相关推荐
- JavaSript严格模式use strict详解
1.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- Javascript 严格模式use strict详解
一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- JavaScript严格模式 use strict
1.在严格模式下,变量必须显示声明(var/let/const),直接给变量赋值,不会隐式创建全局变量 (function(){//非严格模式a = 10;console.log(a); //10 } ...
- JavaScript 严格模式(use strict)
使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增. 它不是一条语句, ...
- Hive笔记之严格模式(strict mode)
Hive有一个严格模式,在严格模式下会对可能产生较大查询结果的语句做限制,禁止其提交执行. 一.切换严格模式 查看当前的模式: hive> set hive.mapred.mode; hive. ...
- 2、ES5的严格模式use strict
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是严格模式: 除了正常运行模式(混杂模式),ES5还添加了第二种运行模式:"严格模式"(stric ...
- JavaScript进阶【二】JavaScript 严格模式(use strict)的使用
版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...
- 点位拍照打卡完成任务小程序JavaScript 严格模式(use strict)
</head> <body><h2>全局 "use strict" 声明.</h2> <p>浏览器按下 F12 开启调试 ...
- JS中的严格模式(Strict Mode)
什么是严格模式? 严格模式是ECMAScript5的新特性,它是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离"马虎模式/稀松模式/懒散模式"(sloppy ...
最新文章
- 从车联网到工业智联网
- gRaphael——JavaScript 矢量图表库:两行代码实现精美图表
- vue require css html,requirejs vue vue.router简单框架
- 手写一个简单的WinForm程序(2)
- Java EE启示录
- 网管型工业交换机和 非网管型工业交换机的优缺点
- 电脑如何进入bios模式_华硕笔记本电脑开机自动进入BIOS界面怎么办?
- 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省
- 浅谈帆软报表的权限授权,以便于二次开发
- 解压文件win10自动删除
- 基于Vivado和Ego1的密码锁设计
- PHP生成二维码与识别二维码,jq生成二维码
- 在Linux上恢复误删除的文件或目录
- 优雅的git commit
- 使用JAVA调用热敏打印机接口实现打印功能
- 数据库SQL经典面试题详解
- linux使用grep查找文件内容,Linux中使用grep命令搜索文件名及文件内容的方法
- CSS优先级权重练习
- CISSP 第五章 物理和环境安全
- 【数据结构】kd树实现,范围查询,邻近查询笔记【1】2d树的构造
热门文章
- centos安装baidupcs
- 优酷暗黑模式(四):设计标准化的技术实现
- 安装使用简单的linux,Ubuntu 14.04下autojump的安装和简单使用
- 贝莱德伦敦分部面试 - Java岗位
- 【目标检测】(9) 改进PANet特征提取金字塔,附Tensorflow完整代码
- 【python中文乱码】git bash终端运行python文件中文乱码的问题
- HP暗影精灵二代的静音键(F5)指示灯不亮的解决方法
- python(十四)--Django学习快速入门
- 代码静态检测工具cppcheck简介
- PyQt5 QTdesigner python 爬虫+简单界面