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 相关文章推荐
js常用代码段收集
Oct 28 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
Jan 19 Javascript
详解微信小程序 wx.uploadFile 的编码坑
Jan 23 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
vue + elementUI实现省市县三级联动的方法示例
Oct 29 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
使用python为mysql实现restful接口
2018/01/05 Python
python实现图片九宫格分割
2021/03/07 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
学习python需要有编程基础吗
2020/06/02 Python
python的链表基础知识点
2020/09/13 Python
python中@contextmanager实例用法
2021/02/07 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
主题婚礼策划方案
2014/02/10 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书