为什么可以';我不能从函数中更改这个全局变量吗?(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
}