es6函数之严格模式用法实例分析


Posted in Javascript onMarch 17, 2020

本文实例讲述了es6函数之严格模式用法。分享给大家供大家参考,具体如下:

从es5开始,函数内部可以设定为严格模式。

function doSomething(a, b) {
 'use strict'
 // code
}

es2016做了一点修改,规定只要函数参数使用了默认值,解构赋值,或者扩展运算符,那么函数内部就不能显示设定为严格模式,否则会报错。

// 报错
function doSomething(a, b = a) {
 'use strict'
 // code
}
const doSomething = function({a, b}) {
 'use strict'
 // code
}
const doSomething = (...a) => {
 'use strict'
 // code
}

const obj = {
 doSomething({a, b}) {
 'use strict'
 // code
 }
}

这样规定的原因是,函数内部的严格模式,同时适用于函数体和函数参数。但是,函数执行的时候,先执行函数参数,然后再执行函数体,这样就有一个不合理的地方,只有从函数体之中,才能知道参数是否应该以严格模式执行,但是参数却应该先于函数体执行。

function doSomething(value = 070) {
 'use strict'
 return value
}

上面代码中,参数value的默认值是八进制数070,但是严格模式下不能用前缀0表示八进制,所以应该报错,但是实际上,javascript引擎会先成功执行value = 070 ,然后进入函数内部,发现需要用严格模式执行,这时才会报错。

虽然可以先解析函数体代码,再执行参数代码,但是这样无疑就增加了复杂性。因此,标准索性禁止了这种用法,只要参数使用了默认值,解构赋值,或者扩展运算符,就不能显示指定严格模式。

两种方法可以规避这种限制。第一种是设定全局性的严格模式,这是合法的。

'use strict'
function doSomething(a, b = a) {
 // code
}

第二种是把函数包在一个无参数的立即执行函数里面。

const doSomething = (function() {
 'use strict'
 return function (value = 42) {
 return value
 }
})

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
理解Javascript_10_对象模型
Oct 16 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
javascript原型链继承用法实例分析
Jan 28 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
Dec 24 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
Angular 4 指令快速入门教程
Jun 07 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 jQuery
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 Javascript
JavaScript实现字符串与HTML格式相互转换
Mar 17 #Javascript
JS对象属性的检测与获取操作实例分析
Mar 17 #Javascript
JS前端模块化原理与实现方法详解
Mar 17 #Javascript
javascript中innerHTML 获取或替换html内容的实现代码
Mar 17 #Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 #Javascript
用js编写留言板
Mar 17 #Javascript
Vue脚手架编写试卷页面功能
Mar 17 #Javascript
You might like
php 文件上传类代码
2011/08/06 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
js实现旋转木马效果
2017/03/17 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
python开发之函数定义实例分析
2015/11/12 Python
python套接字流重定向实例汇总
2016/03/03 Python
python 性能提升的几种方法
2016/07/15 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python热力图实现简单方法
2021/01/29 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
学校对教师的评语
2014/04/28 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
如何自己动手写SQL执行引擎
2021/06/02 MySQL