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 相关文章推荐
基于jquery的loading 加载提示效果实现代码
Sep 01 Javascript
js onmousewheel事件多次触发问题解决方法
Oct 17 Javascript
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 Javascript
JavaScript实现非常简单实用的下拉菜单效果
Aug 27 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 Javascript
Spring MVC中Ajax实现二级联动的简单实例
Jul 06 Javascript
利用JS判断鼠标移入元素的方向
Dec 11 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 Javascript
关于对TypeScript泛型参数的默认值理解
Jul 15 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 远程关机实现代码
2009/11/10 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
查看Django和flask版本的方法
2018/05/14 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
python日志logging模块使用方法分析
2019/05/23 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
优秀的自荐信要注意哪些
2014/01/03 职场文书
运动会广播稿500字
2014/01/28 职场文书
一夜的工作教学反思
2014/02/08 职场文书
《颐和园》教学反思
2014/02/26 职场文书
总结表彰大会主持词
2014/03/26 职场文书
技术负责人任命书
2014/06/05 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
redis数据结构之压缩列表
2022/03/21 Redis
python标准库ElementTree处理xml
2022/05/20 Python