注意:
该文章由JS小白(本人)编写完成,仅为个人总结和理解,若有纰漏和误解,还望多多指出,共同成长😋
js严格模式
"use strict"
当我们在环境顶部使用"use strict"
,后面的代码会按照严格模式的语法进行解析
严格模式:规避了js里不严谨不规范的地方,增强了代码的安全性,提高了编译器的编译效率,为后续版本做铺垫
严格模式有如下几条规定:
1.变量声明
变量必须先声明再使用
2.禁止使用with
var obj = {age:20};
with(obj){
console.log(age);
}
严格模式下会报错,禁止使用with语句
非严格模式下会输出20.
3.设立eval作用域
eval("var a = 10; console.log(a)");
console.log(a);
严格模式下 eval内为一个作用域,此时第二个console.log会报错a为定义。
非严格模式下会输出两个10.
4.函数中的this指向问题
函数中谁调用了this,this就指向谁
function foo(){
console.log(this);
}
foo();
严格模式下 此处this没有指向,会返回undefined。
非严格模式下此处this会指向window。
5.删除变量
在严格模式下使用delete
会报错
6.函数参数不能重名
function foo(x,x){
console.log(x); 严格模式下报错,参数不能相同
}
foo(2);
非严格模式下此处会返回第二个值,但第二个没有实参只有形参,所以会返回undefined。
7.八进制字面量表示法
var num = 017;
console.log(num); 严格模式下报错,非严格模式下会输出15
var num = 0o17; 严格模式下要在0后面添加小写的'o'然后再跟八进制数字。
console.log(num); 使用ES7八进制
8.arguments不追踪参数变化
function foo(x){
console.log(arguments[0]);
x = 2;
console.log(arguments[0]);
}
foo(1);
严格模式下 argumens不会因为参数重新赋值而改变 输出1,1
非严格模式下会改变,输出 1,2
以上是关于JS第十一小节的总结,下次再见😘