JavaScript 生成随机颜色

代码

js 复制代码
function color(color) {
    return (color += "0123456789abcdef"[Math.floor(Math.random() * 6)]) && (color.length == 6 ? color : arguments.callee(color));
}

使用

js 复制代码
// 用法1:全部随机生成
"#" + color(""); // '#201050'

// 用法2:指定前面字母
"#" + color("a2"); // '#a21034'

讲解

代码可以分成2部分来看:

color += "0123456789abcdef"[Math.floor(Math.random() * 6)]

这部分无需讲解,就是在可选范围内随机获取字符。

重点来了!!

arguments.callee(color) 相当于递归调用,将前面已经添加的值作为参数传递。

如:

  1. 开始为空字符串 ""
  2. 经过随机抽取 "a"
  3. 然后不满足6个字符串长度,进行递归(将"a"传递进去)
  4. 经过随机抽取 "a2"
  5. 经过一系列 2-4 步骤后,满足6个字符串长度
  6. 返回 color 【整个函数执行完毕】

拓展知识

arguments.callee(color) 已弃用!

已弃用: 不再推荐使用该特性。虽然一些浏览器仍然支持它,但也许已从相关的 web 标准中移除,也许正准备移除或出于兼容性而保留。请尽量不要使用该特性,并更新现有的代码;

所以讲了这么多!!

统统都没有用!!!!

我们可以直接递归,通过函数名调用(老版本不支持)!

所以,我们简写代码:

js 复制代码
function getColor(color="") {
    return (color += "0123456789abcdef"[Math.floor(Math.random() * 6)]) && (color.length == 6 ? color : getColor(color));
}

其实这样也不符合我们习惯,再改!

js 复制代码
function getColor(color="") {
    if (color.length >= 6) {
        return color;
    }

	// 这个随机字符串可不能再简写哈
    color += "0123456789abcdef"[Math.floor(Math.random() * 6)];
    // 递归
    return getColor(color);
}

好了,本次讲解完毕!

今日所学知识点:递归调用

相关推荐
cpolar技术支持3 分钟前
Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页
java·docker·kafka·cpolar·kafka streams
mayaairi5 分钟前
Vue2 组件通讯(二):ref、自定义事件与provide/inject实战
前端·javascript·vue.js
爱读源码的大都督11 分钟前
DeepSeek面试官问:生产RAG系统回答不准确,该如何定位和优化?这样回答,能让面试官当场给你Offer!
java·后端·python
开开心心就好15 分钟前
PDF图片去水印软件,支持批量处理页面
前端·javascript·人工智能·智能手机·pdf·语音识别
爱敲代码的小杨.23 分钟前
【Spring】Spring Web MVC
前端·spring·mvc
我的世界洛天依33 分钟前
【胡桃讲编程】JS 入门第 1 课:Hello World,开启你的 JavaScript 编程之旅
javascript
杨运交37 分钟前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
是立不是利43 分钟前
深入理解JavaScript事件委托
开发语言·前端·javascript
晴天161 小时前
React 版本迭代解析:从15到19 核心差异-Day40
前端·react.js·前端框架
Raas1001 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和OpenRouter区别?企业级能力差距一览
java·服务器·网络·人工智能·gateway·ai网关·mai gateway