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 相关文章推荐
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
Javascript代码在页面加载时的执行顺序介绍
May 03 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 Javascript
vue登录路由验证的实现
Dec 13 Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 Javascript
Node.js path模块,获取文件后缀名操作
Nov 07 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中随机显示图片的函数代码
2011/06/23 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
python装饰器常见使用方法分析
2019/06/26 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
《放飞蜻蜓》教学反思
2014/04/27 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
质量保证书格式
2015/02/27 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python