typescript|获取年月日星期几

typescript|获取年月日星期几
文章图片

在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。

    推荐阅读