Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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_Jquery - Fatal编程技术网

为什么javascript可以理解函数外和循环外的变量?

为什么javascript可以理解函数外和循环外的变量?,javascript,jquery,Javascript,Jquery,我认为我的问题与你的不一致 在另一种语言(C#)中,我看到一个变量声明 在函数或循环中,当您离开函数或循环时,它们无法访问已在其他函数中声明的变量,但在javascript中可以 $(document).ready(function () { Text(); Tex2(); }); function Text() { for (xxi = 0; xxi < 10; xxi++) { console.l

我认为我的问题与你的不一致

在另一种语言(C#)中,我看到一个变量声明 在函数或循环中,当您离开函数或循环时,它们无法访问已在其他函数中声明的变量,但在javascript中可以

 $(document).ready(function () {
        Text();
        Tex2();
    });
    function Text() {
        for (xxi = 0; xxi < 10; xxi++) {
            console.log(xxi);
            iix = 99;
        }
        console.log(xxi + iix);
        Tex2();
    }
    function Tex2() {
        console.log("What the hel:" + (xxi + iix));
    }
$(文档).ready(函数(){
Text();
Tex2();
});
函数文本(){
对于(xxi=0;xxi<10;xxi++){
控制台日志(xxi);
iix=99;
}
控制台日志(xxi+iix);
Tex2();
}
函数Tex2(){
console.log(“What the hel:”+(xxi+iix));
}
结果是:


有人能为我解释细节吗?谢谢。

您需要声明变量,否则范围将与window.iix相同。下面的代码段具有您期望的结果(错误)

我已将(xxi=0;xxi<10;xxi++)的
行更改为
(var xxi=0;xxi<10;xxi++){

$(文档).ready(函数(){
Text();
Tex2();
});
函数文本(){
对于(var xxi=0;xxi<10;xxi++){
控制台日志(xxi);
iix=99;
}
控制台日志(xxi+iix);
Tex2();
}
函数Tex2(){
console.log(“What the hel:”+(xxi+iix));
}

您需要声明变量,否则范围将与window.iix相同。下面的代码段具有您期望的结果(错误)

我已将(xxi=0;xxi<10;xxi++)的
行更改为
(var xxi=0;xxi<10;xxi++){

$(文档).ready(函数(){
Text();
Tex2();
});
函数文本(){
对于(var xxi=0;xxi<10;xxi++){
控制台日志(xxi);
iix=99;
}
控制台日志(xxi+iix);
Tex2();
}
函数Tex2(){
console.log(“What the hel:”+(xxi+iix));
}

您将它们声明为全局变量,而不使用
var
关键字。使用
var
关键字将它们限定在其预期范围内,或在javascript文件顶部使用
“Use strict”
。您还可以使用
let
关键字将它们限定在其非常局部的范围内

  • 声明不使用的变量具有全局作用域

  • javascript将使用var关键字声明的变量视为其闭合范围或函数内的第一条语句。因此,它全局定义变量,或局部定义整个函数的变量,而不考虑块范围

  • let关键字允许声明范围限于其使用的块、语句或表达式的变量

  • 我已经在下面创建了3个代码段。一个带有
    let
    关键字,一个带有
    var
    关键字,还有一个带有
    对代码使用严格的
    关键字。运行以查看同一代码段的行为变化

    下面的片段

    let
    关键字代码段。运行以查看该变量在块范围之外不可用。
    //let关键字片段。See变量在块范围之外不可用。
    $(文档).ready(函数(){
    Text();
    Tex2();
    });
    函数文本(){
    for(设xxi=0;xxi<10;xxi++){
    控制台日志(xxi);
    设iix=99;
    }
    var-xyz;
    尝试
    {
    xyz=xxi+iix;
    } 
    捕获(e){
    xyz=e;
    }
    console.log(xyz);
    Tex2();
    }
    函数Tex2(){
    var-abc;
    尝试
    {
    abc=(xxi+iix);
    } 
    捕获(e){
    abc=e;
    }
    日志(“什么是hel:+abc”);
    }

    您将它们声明为全局变量,而不使用
    var
    关键字。使用
    var
    关键字将它们限定在其预期范围内,或在javascript文件顶部使用
    “Use strict”
    。您还可以使用
    let
    关键字将它们限定在其非常局部的范围内

  • 声明不使用的变量具有全局作用域

  • javascript将使用var关键字声明的变量视为其闭合范围或函数内的第一条语句。因此,它全局定义变量,或局部定义整个函数的变量,而不考虑块范围

  • let关键字允许声明范围限于其使用的块、语句或表达式的变量

  • 我已经在下面创建了3个代码段。一个带有
    let
    关键字,一个带有
    var
    关键字,还有一个带有
    对代码使用严格的
    关键字。运行以查看同一代码段的行为变化

    下面的片段

    let
    关键字代码段。运行以查看该变量在块范围之外不可用。
    //let关键字片段。See变量在块范围之外不可用。
    $(文档).ready(函数(){
    Text();
    Tex2();
    });
    函数文本(){
    for(设xxi=0;xxi<10;xxi++){
    控制台日志(xxi);
    设iix=99;
    }
    var-xyz;
    尝试
    {
    xyz=xxi+iix;
    } 
    捕获(e){
    xyz=e;
    }
    console.log(xyz);
    Tex2();
    }
    函数Tex2(){
    var-abc;
    尝试
    {
    abc=(xxi+iix);
    } 
    捕获(e){
    abc=e;
    }
    日志(“什么是hel:+abc”);
    }

    当您不使用
    var
    声明变量时,将其理解为全局变量。
    如果您每次声明变量时都使用
    var
    声明变量,则代码中发生的事情不会再次发生。

    当您不使用
    var
    声明变量时,将其理解为全局变量。
    如果使用
    var
    ,代码中发生的事情将不会再次发生
        for (xxi = 0; xxi < 10; xxi++) {
            console.log(xxi); // this variable
            iix = 99; // this variable
        }
    
        for (var xxi = 0; xxi < 10; xxi++) {
            console.log(xxi);
            var iix = 99;
        }
    
        var xxi = "one"; //global variable
        var iix = "two"; //global variable
        globalVar = "three"; // window variable i.e. window.globalVar
        var getValues = function () {
             var xxi; //local variable for the scope 
             var iix; //local variable for the scope 
             for (xxi = 0; xxi < 10; xxi++) {
                console.log(xxi); // takes the local variable
                iix = 99; //local change of value
             }
             globalVar = 100; //change of value to window variable accessible inside
        };
        getValues();
        var seeValues = function () {
            console.log(xxi); //"one" //Displays the value of global because the local variable of getValues() is not accessible outside
            console.log(iix); //"two" //Same as above
            console.log(globalVar); //100 and not "three" //Displays the altered window variable
        };
        seeValues();