Javascript 什么';在循环中只声明一次变量的最快方法是什么?
我有一个函数,它由Javascript 什么';在循环中只声明一次变量的最快方法是什么?,javascript,loops,Javascript,Loops,我有一个函数,它由setInterval()循环 我不想声明全局变量,那么在循环中声明它们的最快方法是什么,但是只能声明一次 这就是我正在做的。称为i:(grrr)的全局变量 必须有一种简单的方法,比如vari=0 | | undefined我不想写一个完整的if语句 谢谢!避免全局变量的javascript通用解决方案是用匿名函数包围库代码 var createInnerBlock = function() { var i = 0 i2 = 0; return = fu
setInterval()循环代码>
我不想声明全局变量,那么在循环中声明它们的最快方法是什么,但是只能声明一次
这就是我正在做的。称为i:(grrr)的全局变量
必须有一种简单的方法,比如vari=0 | | undefined
我不想写一个完整的if语句
谢谢!避免全局变量的javascript通用解决方案是用匿名函数包围库代码
var createInnerBlock = function() {
var i = 0
i2 = 0;
return = function(){
...
};
}();
var drawer = setInterval(createInnerBlock,10);
避免全局变量的javascript通用解决方案是用匿名函数包围库代码
var createInnerBlock = function() {
var i = 0
i2 = 0;
return = function(){
...
};
}();
var drawer = setInterval(createInnerBlock,10);
避免全局变量的一个好方法是定义IIFE立即调用函数表达式
(function(){
var i = 0, //If I declare this in the function my code wont work because I is always 0.
i2 = 0;
var createInnerBlock = function(){
var block = document.createElement("DIV"),
x = block.style,
w = window.innerWidth;
x.height = "150px"
x.width = "150px"
x.backgroundColor = "#FA6900"
x.borderRadius = "15%"
x.left = 5+ i;
x.top = 5 + i2;
i+=160;
x.position = "absolute"
document.body.appendChild(block)
if(i>=w){
i2+=160;
i=0;
if(i2>=window.innerHeight){
clearInterval(drawer);
}
}
}
var drawer = setInterval(createInnerBlock,10);
}());
这里有完全相同的代码,但变量不在全局范围内,而是在该函数范围下。避免全局变量的一个好方法是定义IIFE-立即调用函数表达式
(function(){
var i = 0, //If I declare this in the function my code wont work because I is always 0.
i2 = 0;
var createInnerBlock = function(){
var block = document.createElement("DIV"),
x = block.style,
w = window.innerWidth;
x.height = "150px"
x.width = "150px"
x.backgroundColor = "#FA6900"
x.borderRadius = "15%"
x.left = 5+ i;
x.top = 5 + i2;
i+=160;
x.position = "absolute"
document.body.appendChild(block)
if(i>=w){
i2+=160;
i=0;
if(i2>=window.innerHeight){
clearInterval(drawer);
}
}
}
var drawer = setInterval(createInnerBlock,10);
}());
这里有完全相同的代码,但变量不在全局范围内,而是在该函数范围下。您希望在执行上下文之间持久化变量。您可以将其作为外部词汇环境(闭包或全局变量)的一部分,也可以重新考虑程序流
生活:
(function(){
var i = 0, //If I declare this in the function my code wont work because I is always 0.
i2 = 0;
var createInnerBlock = function(){
var block = document.createElement("DIV"),
x = block.style,
w = window.innerWidth;
x.height = "150px"
x.width = "150px"
x.backgroundColor = "#FA6900"
x.borderRadius = "15%"
x.left = 5+ i;
x.top = 5 + i2;
i+=160;
x.position = "absolute"
document.body.appendChild(block)
if(i>=w){
i2+=160;
i=0;
if(i2>=window.innerHeight){
clearInterval(drawer);
}
}
}
var drawer = setInterval(createInnerBlock,10);
})();
也可以使用setTimeout将其作为参数传递给函数:
var createInnerBlock = function(i) {
var block = document.createElement("DIV"),
x = block.style,
w = window.innerWidth;
x.height = "150px"
x.width = "150px"
x.backgroundColor = "#FA6900"
x.borderRadius = "15%"
x.left = 5+ i;
x.top = 5 + i2;
i+=160;
x.position = "absolute"
document.body.appendChild(block)
if(i>=w){
i2+=160;
i=0;
if(i2>=window.innerHeight){
clearInterval(drawer);
}
}
setTimeout(function() {
createInnerBlock(i);
}, 10);
}
setTimeout(function(){
createInnerBlock(0);
},10);
如果没有闭包或全局变量,您可能无法停止循环。您希望在执行上下文之间保留变量。您可以将其作为外部词汇环境(闭包或全局变量)的一部分,也可以重新考虑程序流
生活:
(function(){
var i = 0, //If I declare this in the function my code wont work because I is always 0.
i2 = 0;
var createInnerBlock = function(){
var block = document.createElement("DIV"),
x = block.style,
w = window.innerWidth;
x.height = "150px"
x.width = "150px"
x.backgroundColor = "#FA6900"
x.borderRadius = "15%"
x.left = 5+ i;
x.top = 5 + i2;
i+=160;
x.position = "absolute"
document.body.appendChild(block)
if(i>=w){
i2+=160;
i=0;
if(i2>=window.innerHeight){
clearInterval(drawer);
}
}
}
var drawer = setInterval(createInnerBlock,10);
})();
也可以使用setTimeout将其作为参数传递给函数:
var createInnerBlock = function(i) {
var block = document.createElement("DIV"),
x = block.style,
w = window.innerWidth;
x.height = "150px"
x.width = "150px"
x.backgroundColor = "#FA6900"
x.borderRadius = "15%"
x.left = 5+ i;
x.top = 5 + i2;
i+=160;
x.position = "absolute"
document.body.appendChild(block)
if(i>=w){
i2+=160;
i=0;
if(i2>=window.innerHeight){
clearInterval(drawer);
}
}
setTimeout(function() {
createInnerBlock(i);
}, 10);
}
setTimeout(function(){
createInnerBlock(0);
},10);
如果没有闭包或全局变量,您可能无法停止循环。您的问题似乎与CSS或HTML无关。如果是这样,请删除这些标记。此外,在提问时,您应该始终删除与您的问题无关的所有内容。这样更容易查看,也更容易理解问题m、 ES 6之前的javascript没有块级别的作用域,因此在函数中声明变量的位置无关紧要。您的问题似乎与CSS或HTML无关。如果是这样,请删除这些标记。此外,在询问问题时,您应该始终删除与问题无关的所有内容。这样更易于查看,并且使问题更容易理解。ES 6之前的javascript没有块级别的作用域,因此在函数中声明变量的位置无关紧要。您可以使用IIFE,或者简单地使用常规包装函数并调用它。+1您可以使用IIFE,或者简单地使用常规包装函数并调用它。+1