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实现下拉菜单效果的代码
Jul 25 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 Javascript
jQuery实现ichat在线客服插件
Dec 29 Javascript
js在指定位置增加节点函数insertBefore()用法实例
Jan 12 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
Mar 17 Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 Javascript
仅30行代码实现Javascript中的MVC
Feb 15 Javascript
整理关于Bootstrap表单的慕课笔记
Mar 29 Javascript
jQuery实现键盘回车搜索功能
Jul 25 jQuery
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
eslint+prettier统一代码风格的实现方法
Jul 22 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php无限级分类实现方法分析
2016/10/19 PHP
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
Python的subprocess模块总结
2014/11/07 Python
深入解析Python中的WSGI接口
2015/05/11 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python断言assert的用法代码解析
2018/02/03 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
python判断数字是否是超级素数幂
2018/09/27 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
python sorted函数原理解析及练习
2020/02/10 Python
Python PyQt5整理介绍
2020/04/01 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
家长给小学生的评语
2014/01/30 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
工作失误检讨书范文
2015/01/26 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
win10更新失败无限重启解决方法
2022/04/19 数码科技