严格模式
严格模式可以在全局声明也可以在函数内声明
1、不是用var声明变量,在严格模式下不被通过
声明变量不加var、const、let会报错
var globalVal=100;
console.log("globalVal",globalVal)
function fun(){
"use strict"
var localVal=100; // 不加var会报错
console.log("localVal",localVal)
}
fun()
2、带有"eval"的操作都被禁止
eval可以将字符串中的js代码直接运行
var eval=100;
console.log("eval",eval)
function fun(eval) {}
fun()
var obj={}
obj.eval=100;
console.log(obj.eval)
3、创建了eval作用域
严格模式下eval中的a和外部的a是两个作用域
var a=100
eval("var a=200;console.log(a)")
console.log(a)
4、with的禁用
var obj={a:1,b:2}
obj.a=11
obj.b=22
console.log(obj)
with(obj){
a=111
b=222
}
console.log(obj)
5、函数中不能有重名的参数
function fun(a,a){
console.log(a)
}
fun(1,2)
6、函数中this的引用
this不再默认指向window,而是指向undefined
function Person(name,age){
this.name=name
this.age=age
}
this->当前创建的实例对象
new Person("tom",30)
this->window
Person("jack",35)
console.log(name,age)
7、禁止delete删除操作
var a=100
delete a
console.log(a)
8、arguments不追踪函数参数的变化
function fun(x){
console.log(arguments[0])
x=2
console.log(arguments[0])
}
fun(1)