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 相关文章推荐
javascript 事件查询综合 推荐收藏
Mar 10 Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
jQuery监控文本框事件并作相应处理的方法
Apr 16 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
14 个折磨人的 JavaScript 面试题
Aug 08 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
Aug 31 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
Nov 13 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
Sep 05 Javascript
小程序实现投票进度条
Nov 20 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
php类常量的使用详解
2013/06/08 PHP
PHP计数器的实现代码
2013/06/08 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
python字典基本操作实例分析
2015/07/11 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
Django之form组件自动校验数据实现
2020/01/14 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
天网面试题
2013/04/07 面试题
理想国读书笔记
2015/06/25 职场文书
退休欢送会主持词
2015/07/01 职场文书
会议新闻稿
2015/07/17 职场文书
Python Socket编程详解
2021/04/25 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android