javascript严格模式的影响
针对js严格模式会报错的编码操作进行了整理,避免不严谨的代码习惯,面向未来编程(es6+)
变量
1.定义八进制格式的数字
2.不带var的变量定义——包括函数体内的
3.对变量的delete操作——除非对象设置configurable为true
语句
1.使用with语句
对象
1.定义Object对象时,名字重复
函数
1.参数名相同
2.函数名.arguments,arguments.callee和arguments.caller调用
3.函数中带this字面量操作时
function A(){
this.a=1;
}
A.call/apply(null)//报错--作用域对象不再自动转换为window,而是传什么是什么
A();//报错--this不再自动转换为window
eval方法
1.在包含上下文中不再创建变量或函数,只在被求值的特殊作用域中生效
function A(){
eval("var x=10");//无效
alert(x);//报错
}
var result = eval("var x=10, y=11; x+y");//有效
其他
1.应用保留字的误用
2.在if,else,for和switch中声明函数
3.违反Object.defineProperty配置的编码操作
强调
1.严格模式的"use strict";声明只能放在上下文第一句,否则无效
2.函传入的参数,实参和 arguments 的值会共享,当没有传入时,实参与 arguments 值不会共享
3.正常模式下,eval语句作用域,取决于它处于全局作用域,还是函数作用域;严格模式下,eval语句本身就是一个作用域,它的生成内容只能用于eval内部