文章图片
在utils中定义了一个formatTime.ts
import moment from 'moment';
// eslint-disable-next-line spellcheck/spell-checker
moment.locale('zh-cn');
// 设置语言 或 moment.lang('zh-cn');
// 实现年月日周几
export const dateWeek = (function getDateWeek () {
const date = new Date();
const day = date.getDay();
// 周一返回的是1,周六是6,国外第一天是周日,所以0 是周日
const arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
return moment(date).format('YYYY年MM月DD日') + ' ' + arr[day];
})();
// 将后端传来的时间 弄成自己想要的格式
export function dateTime (date: number | string |Date) {
return moment(date).format('YYYY-MM-DD HH:mm:ss');
}
上面还涉及到了一个概念 立即执行函数
https://blog.csdn.net/garrulousabyss/article/details/85193494
(function xxx(){}) () 立即执行函数
function xxx(){} 声明了一个立即函数 () 调用此函数
那么为什么还要用另一对括号把匿名函数包起来呢? // 为了兼容 JS 的语法。
立即执行函数有什么用呢?
创建一个独立的作用域。
以一个著名的面试题为例:
var liList = ul.getElementsByTagName('li')
for(var i=0;
i<6;
i++){
liList[i].onclick = function(){
alert(i) // 为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5
}
}
为什么 alert 的总是 6 呢,因为 i 是贯穿整个作用域的,而不是给每个 li 分配了一个 i,如下:
那么怎么解决这个问题呢?用立即执行函数给每个 li 创造一个独立作用域即可(当然还有其他办法):
var liList = ul.getElementsByTagName('li')
for(var i=0;
i<6;
i++){
(function(ii){
liList[ii].onclick = function(){
alert(ii) // 0、1、2、3、4、5
}
})(i) // i 当作参数 传给上面的函数
}
在立即执行函数执行的时候,i 的值被赋值给 ii,此后 ii 的值一直不变。
【typescript|获取年月日星期几】i 的值从 0 变化到 5,对应 6 个立即执行函数,这 6 个立即执行函数里面的 ii 「分别」是 0、1、2、3、4、5。
推荐阅读
- vue.js|el-cascader 自动展开第一项或者某一项的下一级
- Vue|Vue-cli 脚手架一
- 《深入浅出Vue.js》读书笔记2-Proxy的自我尝试
- css|在vue2中vue-router的使用
- ofter数据科学|最完整的Vue教程-从零开始编写可视化大屏
- Vue|Vue 组件化
- 数据结构|for in / for of / forEach 循环
- 前端知识|Vue双向数据绑定原理
- 前端框架|前端开发Vue项目实战(电商后台管理系统(一)前后端搭建)