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的仿照flash放大图片效果代码
Mar 16 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
JavaScript 事件对内存和性能的影响
Jan 22 Javascript
Vue路由跳转问题记录详解
Jun 15 Javascript
bootstrap可编辑下拉框jquery.editable-select
Oct 12 jQuery
解析Vue.js中的组件
Feb 02 Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
Dec 13 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript multibox 全选
2009/03/22 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
python模块之time模块(实例讲解)
2017/09/13 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Django框架多表查询实例分析
2018/07/04 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python字符串下标与切片及使用方法
2020/02/13 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
幼儿园新学期寄语
2014/01/18 职场文书
机械专业求职信范文
2014/07/15 职场文书
奖励申请报告范文
2015/05/15 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL
nginx之queue的具体使用
2022/06/28 Servers