严格模式的作用域
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>11-严格模式的作用域</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
"use strict"要写在当前作用域的顶端
1.函数的顶端:只当当前的函数右作用
2.script的顶端:只对当前的script标签内部有作用
<script>
"use strict";
a = 10;
console.log(a);
function f1() {
// "use strict";
b = 20;
console.log(b);
}
function f2() {
// "use strict";
c = 30;
console.log(c);
}
// f1();
// f2();
</script>
<script>
test = 200;
console.log(test);
</script>
</body>
</html>
严格模式注意点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>09-严格模式注意点</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
严格模式的注意点:
1.必须使用var关键字声明变量
2.使用delete关键字删除全局变量会直接报错
3.对象中不能存在同名的属性
4.函数的形参必须唯一(不能出现同名的参数)
5.禁止使用with语句
6.不能使用eval和arguments作用标识符
7.修正函数内部this的指向
8.禁止使用八进制
9.在if语句中不能声明函数
10.不能使用callee和caller,一个指向函数自身,一个指向调用函数的函数
11.在严格模式下,arguments的使用有区别
<script>
"use strict";
// 1.在非严格模式下,没有使用var声明的变量是全局变量,会自动成为window的属性
// 在严格模式下,必须使用var声明变量
// a = 10;
// console.log(a);
// 2.使用delete关键字删除全局变量会直接报错
// var b = 20;
// console.log(delete b); // false->删除失败(静默错误)
// console.log(b);
// 3.在非严格模式下,对象可以存在同名的属性,后面的会覆盖前面的
// 对象中不能存在同名的属性
// var obj = {
// name : 'zs',
// age : 20,
// name : 'ls'
// }
// console.log(obj.name);
// 4.函数的形参名必须唯一
// function fun(a,b,a) {
// console.log(a + b + a); // 3+2+3=8
// }
// fun(1,2,3);
// 5.禁止使用with语句
// var obj = {
// name : 'zs',
// age : 10
// }
// with(obj){
// name = 'ls';
// age = 20;
// }
// 6.不能使用eval和arguments作用标识符
// var eval = 10;
// var arguments =20;
// console.log(eval);
// 7.修正函数内部this的指向,this始终指向你指定的值
// var obj = {
// age : 20,
// show : function () {
// console.log(this);
// }
// }
// obj.show(); // this->obj
//
// var func = obj.show;
// func(); // this->window(非严格) | undefined(严格)
//
// func.call(null);
// 8.禁止使用八进制
// var a = 012;
// var b = 0123;
// var c = 029;
// console.log(c); // 29
// 9.在if语句中不能声明函数
// if(true){
// function demo() {
// console.log('demo');
// }
// }
//
// demo();
// 10.不能使用callee和caller,一个指向函数自身,一个指向调用函数的函数
// function f1() {
// console.log(f1.caller); // f2
// console.log(arguments.callee); // f1
// }
// function f2() {
// f1();
// }
//
// f2();
// 11.在严格模式下,arguments的使用有区别
// 在非严格模式下,形参和arguments共享同一份数据
// 在严格模式下,形参和arguments是独立的
function func(num) {
// console.log(num); // 12
// console.log(arguments[0]); // 12
num = 30;
console.log(num); // 30
console.log(arguments[0]); // 12
}
func(12);
</script>
</body>
</html>
严格模式的书写格式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>10-严格模式的书写格式</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
书写格式:
1.区分大小写,必须都是小写
2.单引号和双引号都可以
3.分号可以省略
4.必须是10个字符
<script>
// "use strict"; // 正确
// "Use strict"; // 错误
// "use Strict";// 错误
// "Use Strict";// 错误
// "use strict ";// 错误
// "use strict";// 错误
// "usestrict";// 错误
// 'use strict'; // 正确
// "use strict" // 正确
a = 10;
console.log(a);
</script>
</body>
</html>