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重写Cognos右键菜单的实现代码
Apr 11 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
使用 js+正则表达式为关键词添加链接
Nov 11 Javascript
jquery移动节点实例
Jan 14 Javascript
node.js实现爬虫教程
Aug 25 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
Angular 5.0 来了! 有这些大变化
Nov 15 Javascript
vue better-scroll插件使用详解
Jan 25 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
May 10 Javascript
基于angular实现树形二级表格
Oct 16 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 session和cookie使用说明
2010/04/07 PHP
浅析php原型模式
2014/11/25 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
wxpython 学习笔记 第一天
2009/03/16 Python
python实现类之间的方法互相调用
2018/04/29 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
活动策划邀请函
2014/02/06 职场文书
食品安全工作实施方案
2014/03/26 职场文书
教师个人自我评价范文
2014/04/13 职场文书
市场营销工作计划书
2014/05/06 职场文书
2014年底个人工作总结
2015/03/10 职场文书
签约仪式致辞
2015/07/30 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript