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 继承机制实例
Aug 12 Javascript
JQuery 操作select标签实现代码
May 14 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
Jun 07 Javascript
js函数与php函数的区别实例浅析
Jan 12 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
jQuery实现的超简单点赞效果实例分析
Dec 31 Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
BootStrap table实现表格行拖拽效果
Dec 01 Javascript
在layui tab控件中载入外部html页面的方法
Sep 04 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生成zip压缩文件的方法详解
2013/06/09 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
详解php中的implements 使用
2017/06/13 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python中functools模块的常用函数解析
2016/06/30 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
精选奢华:THE LIST
2019/09/05 全球购物
捐款倡议书
2014/04/14 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
vue自定义右键菜单之全局实现
2022/04/09 Vue.js