Javascript window.variable can';无法访问
我正在尝试制作一个网站,其中有一个id为“vid”的文本“game over”,我希望它每300-400毫秒随机排列大小写,并在重置回小写之前保持40毫秒不变。 这是我现在得到的代码:(我的Javascript不是很好)Javascript window.variable can';无法访问,javascript,Javascript,我正在尝试制作一个网站,其中有一个id为“vid”的文本“game over”,我希望它每300-400毫秒随机排列大小写,并在重置回小写之前保持40毫秒不变。 这是我现在得到的代码:(我的Javascript不是很好) setInterval(函数(){ window.smth=Math.floor((Math.random()*100)+1)+300; var elem=document.getElementById('vid'); elem.textContent=“游戏结束”; set
setInterval(函数(){
window.smth=Math.floor((Math.random()*100)+1)+300;
var elem=document.getElementById('vid');
elem.textContent=“游戏结束”;
setTimeout(函数(){
elem.textContent=elem.textContent.split(“”).map(函数(v){
var chance=Math.round(Math.random());
return v=chance?v.toUpperCase():v.toLowerCase();
}).加入(“”);
},window.smth);
},window.smth+40)代码>
因为在回调中设置了window.smth
,所以在设置间隔时它是未定义的。即使在第一次调用回调后定义了smth
,它仍然不起作用,因为setInterval
函数只调用一次
创建这样的间隔的方法是多次超时;伪代码:
setTimeout(=>{
//做点什么
setTimeout(…,otherTime)//您不想嵌套并嵌套它,只需为此创建一个递归函数即可
},时间)
您在第一次超时回调中声明了window.smith
,但在实际调用回调之前使用了它。
所以最后一行的window.smith
在当时实际上仍然是未定义的
尝试将window.smth
定义移出第一个回调,如下所示:
window.smth = Math.floor((Math.random() * 100) + 1) + 300;
setInterval(function() {
var elem = document.getElementById('vid');
elem.textContent = "game over";
setTimeout(function() {
elem.textContent = elem.textContent.split('').map(function(v) {
var chance = Math.round(Math.random());
return v = chance ? v.toUpperCase() : v.toLowerCase();
}).join('');
}, window.smth);
}, window.smth + 40);
将smth
从setInterval()
放入另一个:
var-smth=500;
setInterval(function(){smth=Math.floor((Math.random()*100)+1)+300;},250);
setInterval(函数(){
var elem=document.getElementById('vid');
elem.textContent=“游戏结束”;
setTimeout(函数(){
elem.textContent=elem.textContent.split(“”).map(函数(v){
var chance=Math.round(Math.random());
return v=chance?v.toUpperCase():v.toLowerCase();
}).加入(“”);
},smth);
},smth)代码>
不要将窗口
对象用作全局变量保持器。只要在你希望你的时间间隔运行的时候,在时间间隔之外,分配一个变量就可以了。这里的问题到底是什么?为什么你认为window.smth
被忽略了?这意味着window.smth
总是一样的。如果你嵌套、嵌套、再嵌套,你不会做无限次,你需要使用setInterval()
不,那不是真的。我在评论中所说的;您必须为此创建一个函数并递归调用它