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实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
JavaScript中的字符串操作详解
Nov 12 Javascript
javascript连续赋值问题
Jul 08 Javascript
js获取Html元素的实际宽度高度的方法
May 19 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
Jul 04 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 Javascript
javascript实现QQ空间相册展示源码
Dec 12 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 jQuery
微信公众号平台接口开发 获取微信服务器IP地址方法解析
Aug 14 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/11/03 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
PHP导入导出Excel代码
2015/07/07 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
es6 symbol的实现方法示例
2019/04/02 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python调试神器PySnooper的使用
2019/07/03 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
python switch 实现多分支选择功能
2020/12/21 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
出国留学经济担保书
2014/04/01 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
教师节慰问信
2015/02/15 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
微信小程序基础教程之echart的使用
2021/06/01 Javascript
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python