我有一个脚本,检查变量是否设置或等于'否'。如果它等于no或未设置,则将var定义为“yes”。
这是我的代码
if (typeof progress == 'undefined' || progress == 'no') {
document.getElementById('button-play').onclick = null;
var progress = 'yes';
然后调用一个函数,将变量覆盖为no。
function enableButton(){
var progress = 'no';
document.getElementById('button-play').onclick = play();
}
第一次执行脚本并且进度未定义时,脚本工作,并且将进度覆盖为'no',但是当我尝试再次运行脚本并将var progress定义为'no'时,它不起作用。
我是否正确检查进度值?
添加了jsfiddle:https://jsfiddle.net/zxxubopq/
答案 0 :(得分:2)
Javascript中的scope
是全局或功能。如果您在function
中定义变量,则该变量仅限于function
。
这不会覆盖变量,它是progress
范围内的另一个本地enableButton()
变量。你应该修复你的范围,它会起作用。
评论后编辑:
document.getElementById('button-play').onclick = play();
实际上是错误的,因为您要将函数分配给onclick
,而不是返回值,因此您实际需要:
document.getElementById('button-play').onclick = play;
请记住,JavaScript函数是一流的函数,因此它们可以像任何其他对象一样对待。
答案 1 :(得分:2)
函数内的var
使变量progress
成为本地变量。因此,对局部变量的任何更改都不适用于全局变量。
答案 2 :(得分:1)
function enableButton(){
var progress = 'no';
}
这行代码在函数内部创建了新的变量var progress
。因此,当函数退出时,此变量将被删除。
尝试将其更改为:
function enableButton(){
progress = 'no';
}
答案 3 :(得分:0)
声明变量'进展'外面的两个功能都在开始。