3.3.3、函数必须声明在顶层
其实这和 JavaScript 中的块级作用域是比较相符的,在严格模式下,我们不能把函数声明在 if 或者 for 语句中。
非严格模式
<script> // "use strict"; if (true) { function setName(name){ console.log(name) } } setName('snow'); </script>
严格模式
<script> "use strict"; if (true) { function setName(name){ console.log(name) } } setName('snow'); </script>
3.4、禁止使用eval()
eval 一直都是备受大家争议的,它可以直接执行一段代码,这会导致非常多的问题,所以在严格模式下直接禁用它了。
非严格模式
<script> //"use strict"; function setName(name){ eval('myname = "snowball"') console.log(myname) } setName('snow'); </script>
严格模式
<script> "use strict"; function setName(name){ eval('myname = "snowball"') console.log(myname) } setName('snow'); </script>
3.5、禁止使用width语句
with 语句主要用来扩展作用域链,它也备受争议,因为它无法在编译时确定属性到底属于哪个对象,所以我们目前是不建议使用它,所以严格模式下也直接禁止使用它了。
非严格模式
<script> //"use strict"; let obj = { name: 'snow' } with (obj) { name = 'snowball'; } console.log(obj); </script>
严格模式
<script> "use strict"; let obj = { name: 'snow' } with (obj) { name = 'snowball'; } console.log(obj); </script>
3.6、this无法指向全局
使用 bind、apply 等方法修改 this 指向,但是当我们没有显示执行 this 指向时,this 默认会指向全局,在严格模式下这是不允许的。
非严格模式
<script> // "use strict"; function setName() { console.log('this:' this) } setName.call(null) </script>
严格模式
<script> "use strict"; function setName() { console.log('this:' this) } setName.call(null) </script>
3.7、禁止八进制写法
在正常模式下,如果某个整数的第一位是 0,那么表示该数是八进制数,会自动进行转换,但是在严格模式下无法进行有效转换。
非严格模式
<script> //"use strict"; let snow = 0100 console.log(snow) </script>
严格模式
<script> "use strict"; let snow = 0100 console.log(snow) </script>
四、再次理解严格模式
严格模式给我们带来了规范,但是同时也给我们带来了一些不便,但是为了未来的发展,我们最好还是按照严格模式的要求来,这样可以最大程度的减少我们出错的机率,也能够让我们的程序能够走得更远。
五、过程记录
记录一:
1、创建项目strict/index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>title</title> <head> <body> // 变量 "use strict" snow = "snowball" console.log(snow) </body> </html>
2、http-server启动项目的服务
3、启动后访问页面
4、访问成功
记录二:
vue2项目,,没有开启严格模式也会报错,,
nuxt3+vue3+ts项目,,没有开启严格模式也会报错,,
// vue2项目 let snow = 0100 console.log(snow)
// vue3 + ts项目 let snow = 0100 console.log(snow)
这说明,vue工程化项目,默认已经开启了严格模式,其实是这样的开启了。
如果不想开启,可以在项目中进行配置。
五、欢迎交流指正、关注我、一起学习。