js定时器——使代码输出0-9

1、for(var i=0;i<10;i++){ setTimeout(() => { console.log(i) }, 1000); }
每间隔1s输出10,10,10,10,10,10,10,10,10,10
2、定时器+闭包
每间隔1s输出0,1,2,3,4,5,6,7,8,9

for(let i=0;i<10;i++){
    //闭包加定时器+i
    setTimeout(((e) => {
        return function(){
            console.log(e)
        }
     })(i), 1000);    
}

2、输出10个undefined

for(let i=0;i<10;i++){
    //定时器+i(形参)//未传入参数,所以都为undefined
    setTimeout((i) => {
        console.log(i)
    }, 1000);  
}

3、每间隔1s输出0,1,2,3,4,5,6,7,8,9

for(let i=0;i<10;i++){
    setTimeout(() => {
        console.log(i)
    }, 1000);  
}

注:利用 let 变量的特性 — 在每一次 for 循环的过程中,let 声明的变量会在当前的块级作用域里面(for 循环的 body 体,也即两个花括号之间的内容区域)创建一个文法环境(Lexical Environment),该环境里面包括了当前 for 循环过程中的 i。
4、利用 setTimeout 函数的第三个参数,会作为回调函数的第一个参数传入

```javascript
for(let i=0;i<10;i++){
    //定时器+i(形参)//未传入参数,所以都为undefined
    setTimeout((i) => {
        console.log(i)
    }, 1000,i);  
}

注:对2的改进,setTimeout的第三个参数的回调函数的实参

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能,你可以通过以下步骤来进行: 1. 配置定时器 首先,你需要配置一个定时器,并使其产生中断。在定时器的中断服务函数中,你可以更新显示的数字并输出到数码管。 2. 配置数码管 你需要将数码管连接到 MCU 的 GPIO 引脚上,并设置这些引脚为输出模式。然后,你需要根据你的硬件连接方式和数码管类型来编写驱动代码,以便将数字显示到数码管上。 3. 编写中断服务程序 在定时器中断服务函数中,你需要实现以下功能: a. 记录当前要显示的数字 b. 更新数字以显示下一个数字 c. 将数字输出到数码管上 4. 调试代码 在编写完代码后,你需要调试它,确保它能够正确地将数字显示在数码管上。 下面是一个示例代码,用于 STM32F103C8T6 开发板,使用定时器 TIM2 和共阳数码管来显示数字: ``` #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_tim.h" // 数码管引脚定义 #define LED_A GPIO_Pin_0 #define LED_B GPIO_Pin_1 #define LED_C GPIO_Pin_2 #define LED_D GPIO_Pin_3 #define LED_E GPIO_Pin_4 #define LED_F GPIO_Pin_5 #define LED_G GPIO_Pin_6 #define LED_DP GPIO_Pin_7 // 数码管数字表 const uint8_t LED_NUMS[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 }; uint8_t led_index = 0; // 当前要显示的数字 // 数码管显示函数 void LED_Display(uint8_t num) { GPIO_Write(GPIOB, LED_NUMS[num]); } // 定时器中断服务函数 void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) == RESET) { return; } TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 更新数码管显示 LED_Display(led_index++ % 10); } // 主函数 int main(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; // 使能 GPIOB 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 配置 PB0 - PB7 为推挽输出模式 GPIO_InitStructure.GPIO_Pin = LED_A | LED_B | LED_C | LED_D | LED_E | LED_F | LED_G | LED_DP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 使能 TIM2 时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 配置 TIM2 TIM_TimeBaseStructure.TIM_Period = 1999; // 定时器重装值,控制定时周期 TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 定时器预分频值,控制定时器时钟频率 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 使能定时器中断 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 配置定时器中断优先级 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 启动定时器 TIM_Cmd(TIM2, ENABLE); while (1) { // 主循环空闲 } } ``` 这段代码使用 TIM2 定时器,每隔 100ms 切换数码管显示的数字,将 0-9 循环显示在数码管上。你需要根据你的硬件和需求来进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值