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过滤html的字符串(注释标记法)
Jul 08 Javascript
jquery 取子节点及当前节点属性值的方法
Aug 24 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
jQuery获取剪贴板内容的方法
Jun 16 Javascript
详解VUE 数组更新
Dec 16 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
Apr 22 Javascript
webpack4.x打包过程详解
Jul 18 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
Mar 29 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
vue 实现cli3.0中使用proxy进行代理转发
Oct 30 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
网络资源
2006/10/09 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
详解Python3.1版本带来的核心变化
2015/04/07 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
工作时间上网检讨书
2014/02/03 职场文书
借款协议书
2014/09/16 职场文书
工作试用期自我评价
2015/03/10 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python