Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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_Loops - Fatal编程技术网

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