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 幻灯插件和教程
Mar 27 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
Javascript中 关于prototype属性实现继承的原理图
Apr 16 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
Aug 28 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
Dec 01 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
浅谈JavaScript的全局变量与局部变量
Jun 10 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
Vue 动态设置路由参数的案例分析
Apr 24 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
Jul 25 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 程序员的调试技术小结
2009/11/15 PHP
php把数组值转换成键的方法
2015/07/13 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
浅析node.js的模块加载机制
2018/05/25 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
Python程序运行原理图文解析
2018/02/10 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
2019/04/29 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
Python devel安装失败问题解决方案
2020/06/09 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
幼儿园实习自我鉴定
2013/12/15 职场文书
企业后勤岗位职责
2014/02/28 职场文书
入股协议书范本
2014/04/14 职场文书
质量提升方案
2014/06/16 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
2015年安全生产责任书
2015/01/30 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python