JavaScript:严格模式(下)

简介: JavaScript:严格模式(下)

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工程化项目,默认已经开启了严格模式,其实是这样的开启了。

如果不想开启,可以在项目中进行配置。

五、欢迎交流指正、关注我、一起学习。

相关文章
|
3月前
|
JSON JavaScript 前端开发
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
|
3月前
|
Web App开发 JavaScript 前端开发
JavaScript 严格模式(use strict)
JavaScript 严格模式(use strict)
45 0
|
5月前
|
JavaScript 前端开发 安全
20 JavaScript学习:变量提升和严格模式
20 JavaScript学习:变量提升和严格模式
|
6月前
|
JavaScript 前端开发 安全
JS 严格模式和正常模式的区别
JS 严格模式和正常模式的区别
|
7月前
|
JavaScript 前端开发 安全
javascript中的严格模式(use strict)
javascript中的严格模式(use strict)
50 1
|
JavaScript 前端开发
JavaScript的严格模式
ECMAScript 6 首次引入严格模式的概念。严格模式用于选择以更严格的条件检查 JavaScript 代码错 误,可以应用到全局,也可以应用到函数内部。严格模式的好处是可以提早发现错误,因此可以捕获某 些 ECMAScript 问题导致的编程错误。 理解严格模式的规则非常重要,因为未来的 ECMAScript 会逐步强制全局使用严格模式。严格模式 已得到所有主流浏览器支持。
61 0
|
7月前
|
JavaScript 前端开发 安全
|
7月前
|
JavaScript 前端开发 安全
JavaScript高级主题:JavaScript 中的严格模式是什么?有什么好处?
JavaScript高级主题:JavaScript 中的严格模式是什么?有什么好处?
82 0
|
7月前
|
JavaScript 前端开发 安全
JavaScript 严格模式
JavaScript 严格模式
|
JavaScript 前端开发
JS严格模式详解
JS严格模式详解
172 0