2、ES5的严格模式use strict
2019独角兽企业重金招聘Python工程师标准>>>
一、什么是严格模式:
除了正常运行模式(混杂模式),ES5还添加了第二种运行模式:“严格模式”(strict mode),使用严格模式的时候运行环境会更加严格要求JavaScript的语法。
二、严格模式的使用:
在全局或函数的第一条语句定义为'use strict' ,如果浏览器不支持,只解析为一条简单的语句,没有任何副作用。如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>严格模式</title>
</head>
<body><script type="text/javascript">'use strict';</script></body>
</html>
三、严格模式的影响。
- 必须使用var声明变量
- 禁止自定义的函数中的this指向window。
- 创建eval作用域。
- 对象不能有重名的属性。
例子1:必须使用var声明变量。
下面的代码不是严格模式,username变量直接写,没有用var声明。相当于在window上添加了一个全局的属性username。
<script type="text/javascript">username ='张三';//window.usernameconsole.log(username);</script>
严格模式下:这段代码会报错。
<script type="text/javascript">'use strict';username ='张三';//window.usernameconsole.log(username);</script>
在浏览器中打开html运行,会报错。"username is not defined" 。
严格模式下正确的写法:使用var声明变量。
<script type="text/javascript">'use strict';var username ='张三';//window.usernameconsole.log(username);</script>
例子2:禁止自定义的函数中的this指向window。
<script type="text/javascript">function Person(name,age) {this.name = name;this.age=age;}Person("zhangsan",18);//这里的person相当于被window调用,函数里面的this指向了windowconsole.log(window.name);console.log(window.age);
</script>
上面的代码不是严格模式。当直接调用person函数时,相当于被window调用,函数里面的this指向了window。并且能打印出window.name、window.age的值。
下面使用严格模式:
<script type="text/javascript">'use strict';function Person(name,age) {this.name = name;this.age=age;}Person("zhangsan",18);console.log(window.name);console.log(window.age);
</script>
使用严格模式之后。执行Person("zhangsan",18)代码时,里面的this会指向undefined,报错信息如下:
严格模式下的正确调用:
<script type="text/javascript">'use strict';function Person(name,age) {this.name = name;this.age=age;}var p = new Person("zhangsan",18);console.log(p.age);console.log(p.name);
</script>
例子3:创建eval作用域。
eval()函数里面传递一个字符串作为参数,会把里面的字符串当做一个js来运行。
<script type="text/javascript">var username = "zhangsan";//这里会打印内部的username=李四eval("var username='李四';console.log('eval内部:'+username);")console.log(username);
</script>
上面的代码:最后打印的username是 “李四”,也就是eval函数里面的代码影响了外部的变量值。
如果是严格模式,那eval函数里面的代码会被封装,不影响外面的username的值。username的值会是"zhangsan"。
例子4:对象不能有重名的属性。
严格模式下,一个对象里面有2个重名的属性。编译器会报错。如下一个对象有2个username属性。
转载于:https://my.oschina.net/kunBlog/blog/1634403
2、ES5的严格模式use strict相关推荐
- JavaSript严格模式use strict详解
1.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- Javascript 严格模式use strict详解
一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...
- 严格模式 use strict
##严格模式下需要注意的点: 全局变量显式声明 直接调用函数this指向undefined delete删除全局变量会报错 对象不能有重名的属性 函数不能有重名的参数 对arguments做了限制 1 ...
- JS中的严格模式(Strict Mode)
什么是严格模式? 严格模式是ECMAScript5的新特性,它是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离"马虎模式/稀松模式/懒散模式"(sloppy ...
- JavaScript严格模式 use strict
1.在严格模式下,变量必须显示声明(var/let/const),直接给变量赋值,不会隐式创建全局变量 (function(){//非严格模式a = 10;console.log(a); //10 } ...
- JavaScript 严格模式(use strict)
使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增. 它不是一条语句, ...
- Hive笔记之严格模式(strict mode)
Hive有一个严格模式,在严格模式下会对可能产生较大查询结果的语句做限制,禁止其提交执行. 一.切换严格模式 查看当前的模式: hive> set hive.mapred.mode; hive. ...
- JavaScript进阶【二】JavaScript 严格模式(use strict)的使用
版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...
- 点位拍照打卡完成任务小程序JavaScript 严格模式(use strict)
</head> <body><h2>全局 "use strict" 声明.</h2> <p>浏览器按下 F12 开启调试 ...
最新文章
- 深度分析Java的枚举类型——枚举的线程安全性及序列化问题
- 说明:最新谷歌AI智商不超过6岁研究来自中国科学院而非美国康内尔大学
- 使用PHP对数据库输入进行恶意代码清除
- qsort与sort()
- Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533)
- winCVS 使用方法
- ACM Doing Homework again
- Android之webview与js交互
- linux 查看各个cpu使用率
- 【算法】排序_基数排序
- 容器技术Docker K8s 29 容器服务ACK基础与进阶-弹性伸缩
- hadoop2.6.0的eclipse插件编译和设置
- cad隐藏图层命令快捷键_CAD中,有没有快速隐藏其他图层的快捷键啊? 新上
- 沉浸式体验在文化展馆设计中应用
- 群晖Docker的高级操作
- 蓝桥杯:C语言实现字母图形
- C语言——初识C语言(define定义常量和宏,指针,结构体)
- java有substr方法_java substring和substr
- UVa 10382 - Watering Grass
- Java实现将本地.html文件以.docx文件格式导出并添加水印