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 相关文章推荐
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
jQuery 删除或是清空某个HTML元素示例
Aug 04 Javascript
jquery实现submit提交表单
Feb 03 Javascript
Java Mybatis框架入门基础教程
Sep 21 Javascript
jQuery获取cookie值及删除cookie用法实例
Apr 15 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
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
function.inc.php超越php
2006/12/09 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
php实现的验证码文件类实例
2015/06/18 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
Python 含参构造函数实例详解
2017/05/25 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
python版飞机大战代码分享
2018/11/20 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Django框架实现的分页demo示例
2019/05/25 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
学生会干部自荐信
2014/02/04 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
师范类求职信
2014/06/21 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
裁员通知
2015/04/25 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
教师岗位说明书
2015/09/30 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电