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下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
Oct 31 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
js添加事件的通用方法推荐
May 15 Javascript
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
react中使用swiper的具体方法
May 15 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 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中的正规表达式(一)
2006/10/09 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
php二维码生成以及下载实现
2017/09/28 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
C#中的验证控件有几种
2014/03/08 面试题
表彰先进的通报
2014/01/31 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
教师网络培训心得体会
2016/01/09 职场文书