'use strict' //全局中开启严格模式
//1、严格模式不允许省略var定义变量
a = 10
console.log(a); //报错
//全局开启的严格模式,可以约束到全局代码以及局部代码
//局部开启的严格模式,只能约束局部代码
function fn() {
a = 20
}
fn()
console.log(a); //报错
//2.不允许函数的形参同名
function fn(a, a) {
'use strict' //在局部开启严格模式,只能约束局部代码
// 形参就相当于在局部内定义了变量
// var a = 1 var a = 2
console.log(a);
console.log(a+a);
}
fn(1,2) //报错
//3.不允许普通函数中的this关键字代表window窗口
// this在js中是一个关键字 - 代表一个值
// 在js中算是一个难点,this会在不同的作用域中或不同的场景中,代表的含义是不一样的
// 5个this的使用场景:
// ①可以在全局使用 - 代表浏览器窗口window
console.log(this); // 开启严格模式也代表window
// ②普通函数中可以使用 - 代表浏览器窗口window
function fn(){
console.log(this)
}
fn() //开启严格模式为undefined
// ③自调用函数可以使用 - 代表浏览器窗口window
(function (){
console.log(this)
})() //开启严格模式,会报错
// ④在事件处理程序的函数中可以使用 - 代表当前事件触发的事件源
<!-- <button id="btn">按钮</button> -->
btn.onclick = function(){
console.log(this)
} //是否开启严格模式都是当前事件源
// ⑤.在对象的方法可以使用 - 代表当前方法所在的对象
var obj = {
name:'张三',
age:12,
eat:function(){
console.log(this)
}
}
console.log(obj) //输出对象
obj.eat() //是否开启严格模式都是输出对象obj