米修打怪兽 2023-04-06 13:50 采纳率: 50%
浏览 17

为什么js的setInterval函数里无法引用外围的变量?

run()函数里的if语句的条件报错了:

   Uncaught TypeError: Cannot read properties of undefined (reading 'style')

请问如何修改才能让i变量可以在if里起作用?


var ulpainshop = document.querySelectorAll('.ulpainshop');

var opacity = 0;
 


//二级菜单持续显示
console.log("js已执行"); 



function screenmove(){
    console.log("鼠标移入执行");
   
    var i = 0;    
}
     

  
//通用的文字出现动画
 

function textAnimationStart(name){
    this.name = name;
    console.log("动画已执行"); 
    var i =0;
   name[i].style.visibility = "visible";
    while(i<3){
        console.log("a步骤"); 
        var timer = null;
        timer = setInterval(run,20);
        name[i].style.opacity = opacity;
        
        function run(){


            
    
            if (name[i].style.opacity == 1) {         /*这里的style报错了,我手动把i换成0的时候就不会报错*/
                console.log("结束");
                clearInterval(timer);
               
                
            } else {
                console.log("c步骤");
                opacity = opacity + 0.05;
                }
            
            }

       
                i++;
    }
   
}





  • 写回答

2条回答 默认 最新

  • 心寒丶 全栈领域优质创作者 2023-04-06 14:05
    关注

    申明i的语句 var i =0; 放最外边,或者调用run的时候传进去 run(i,20)这样

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月6日

悬赏问题

  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了