/** description字符串脱敏解决 substr repeat Math.min(max, Math.max(0, repeatNum))* param {Number} beginLen 字符串头显示位数* param {Number} endLen 字符串尾显示位数* param {Number} max 默认值999 *显示最大数目* */function getStr (beginLen, endLen, max=999) {  // 这里用了闭包,闭包用完后需手动开释内存  return function (str) {    const firstStr = str.substr(0, beginLen)    const lastStr = endLen == 0 ? '' : str.substr(endLen)    let repeatNum = Math.max(0, str.length - (beginLen + Math.abs(endLen)))    repeatNum = Math.min(max, repeatNum)    const middleStr = '*'.repeat(repeatNum)    return firstStr + middleStr + lastStr  }}/*昵称脱敏规定1个字符:显示2个字符:首字符+*(王雨 显示 王*)3个字符:首字符+*+开端字符(王哈呀 显示 王*呀)4个字符:首2字符+**+开端字符(yhzj 显示 yh*j)5个字符:首2字符+*+开端2字符(王语嫣要得 显示 王语*要得)6个字符:首2字符+**+开端2字符(天天开心小野 显示 天天**小野)大于6个字符:首2字符+***+开端2字符(天天开心呀小野 显示 天天***小野)*/let getName = (str) => {  let getResult = null  switch (str.length) {    case 1:    case 2:      getResult = getStr(1, 0)      break    case 3:      getResult = getStr(1, -1 )      break    case 4:      getResult = getStr(2, -1)      break    default:      getResult = getStr(2, -2, 3)      break  }  const result = getResult(str)  getResult = null // 闭包-需手动开释  return result}console.log(getName('王'))console.log(getName('王语'))console.log(getName('王语语'))console.log(getName('王嘻嘻嘻'))console.log(getName('王嘻嘻嘻呀'))console.log(getName('天天开心小野'))console.log(getName('天天开心小野人'))console.log(getName('天天开心小野人呀'))console.log(getName('天天开心小野人呀天天开心小野人呀'))let getPhone = getStr(3, -4)let getIdCard = getStr(6, -4)let getBankCard = getStr(6, -4)console.log(getPhone(`18888888888`))console.log(getIdCard(`500106197003039999`))console.log(getBankCard(`6227000000000000001`))// 闭包-需手动开释getPhone = nullgetIdCard = nullgetBankCard = null