Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能从函数中更改这个全局变量吗?(JavaScript)_Javascript_Global Variables_Scopes - Fatal编程技术网

为什么可以';我不能从函数中更改这个全局变量吗?(JavaScript)

为什么可以';我不能从函数中更改这个全局变量吗?(JavaScript),javascript,global-variables,scopes,Javascript,Global Variables,Scopes,简单的倒计时项目 预期结果: 全局变量确定默认时间 然后,滑块值覆盖该变量 问题:滑块值在本地更改,但全局值保持不变。 我整天都在看关于可变范围的教程,但仍然看不出有什么问题,因为: 在函数外部用“var”声明全局:var initialMinutes=5 尝试更新函数内部的值,如下所示: 我也尝试过在这里和那里使用window.variable,但都没有用。 我希望有人能帮忙。这一点越来越难以界定 const countdown = document.getElementById('cou

简单的倒计时项目

预期结果:

  • 全局变量确定默认时间
  • 然后,滑块值覆盖该变量
  • 问题:滑块值在本地更改,但全局值保持不变。

    我整天都在看关于可变范围的教程,但仍然看不出有什么问题,因为:

    • 在函数外部用“var”声明全局:
      var initialMinutes=5
    • 尝试更新函数内部的值,如下所示:
    我也尝试过在这里和那里使用
    window.variable
    ,但都没有用。 我希望有人能帮忙。这一点越来越难以界定

    const countdown = document.getElementById('countdown')
    const slider = document.getElementById('slider')
    const startBtn = document.getElementById('btn-startStop')
    const resetBtn = document.getElementById('btn-reset')
    
    
    // Event Listeners
    const change = slider.addEventListener('change', setMins)
    const start = startBtn.addEventListener('click', startStop)
    const reset = resetBtn.addEventListener('click', resetApp)
    
    // Time
    var initialMinutes = 15
    countdown.innerHTML = initialMinutes+':00'
    const initialDuration = initialMinutes * 60
    let time = initialMinutes * 60
    
    let interval = null
    let status = 'stopped'
    
    function updateCountdown() {
    
      const minutes = Math.floor(time / 60)
      let seconds = time % 60
      seconds = seconds < 10 ? '0'+ seconds : seconds
    
      if( time < 1) {
        clearInterval(interval)
        startBtn.innerHTML = 'START'
        status = 'stopped'
        countdown.innerHTML = `00:00`
      } else {
        countdown.innerHTML = `${minutes}:${seconds}`
        time--;
      }
    }
    
    function startStop() {
      if(status === 'stopped') {   
        interval = setInterval(updateCountdown, 50)
        startBtn.innerHTML = 'STOP'
        status = 'running'
      } else {
        clearInterval(interval)
        startBtn.innerHTML = 'START'
        status = 'stopped'
      }
    }
    
    function setMins() {
        initialMinutes = slider.value
        countdown.innerHTML = slider.value+':00'
    }
    function resetApp() {
      clearInterval(interval);
      document.getElementById('countdown').innerHTML = '00:00'
      startBtn.innerHTML = 'START'
      status = 'stopped'
    }
    
    const countdown=document.getElementById('countdown'))
    常量滑块=document.getElementById('滑块')
    const startBtn=document.getElementById('btn-startStop')
    const resetBtn=document.getElementById('btn-reset')
    //事件侦听器
    const change=slider.addEventListener('change',setMins)
    const start=startBtn.addEventListener('click',startStop)
    const reset=resetBtn.addEventListener('单击',resetApp)
    //时间
    var initialMinutes=15
    countdown.innerHTML=initialMinutes+':00'
    常量initialDuration=initialMinutes*60
    让时间=分钟*60
    设间隔为空
    让状态='停止'
    函数updateCountdown(){
    常数分钟=数学楼层(时间/60)
    让秒=时间%60
    秒=秒<10?'0'+秒:秒
    如果(时间<1){
    清除间隔(间隔)
    startBtn.innerHTML='START'
    状态='已停止'
    countdown.innerHTML=`00:00`
    }否则{
    countdown.innerHTML=`${minutes}:${seconds}`
    时间--;
    }
    }
    函数startStop(){
    如果(状态=='stopped'){
    间隔=设置间隔(更新计数,50)
    startBtn.innerHTML='STOP'
    状态='正在运行'
    }否则{
    清除间隔(间隔)
    startBtn.innerHTML='START'
    状态='已停止'
    }
    }
    函数setMins(){
    initialMinutes=slider.value
    countdown.innerHTML=滑块.value+':00'
    }
    函数resetApp(){
    间隔时间;
    document.getElementById('countdown')。innerHTML='00:00'
    startBtn.innerHTML='START'
    状态='已停止'
    }
    
    为清晰起见,包含代码笔链接:
    明白了!这不是一个范围问题,而是一个变量赋值问题。
    updateCountdown()
    使用
    time
    time=initialMinutes*60

    我以为更改
    initialMinutes
    会自动更改
    time
    内的值,但事实并非如此

    在函数内部重新分配
    时间
    可以解决此问题

    function setMins() {   
        initialMinutes = slider.value
        time = initialMinutes * 60
    }
    

    欢迎来到堆栈溢出!请发一封信。你可以用一个程序来执行它。我是新来的。我通过代码笔链接附上了完整的代码。这就足够了吗?代码太多了,很难看到具体的问题。你不能缩小范围吗?您不需要使用codepen,您可以将代码放在这里。更改后,您不会使用新值
    initialMinutes
    更新倒计时计时器。如何更新?我可以更改元素的innerHTML,但不知道如何更新变量值。在大多数编程语言中,变量赋值不是这样工作的。赋值一个变量只是复制该值,而不是使其成为表达式的同义词。
    function setMins() {   
        initialMinutes = slider.value
        time = initialMinutes * 60
    }