Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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 JS变量声明的类型_Javascript_Variables_Variable Assignment_Variable Declaration - Fatal编程技术网

Javascript JS变量声明的类型

Javascript JS变量声明的类型,javascript,variables,variable-assignment,variable-declaration,Javascript,Variables,Variable Assignment,Variable Declaration,因此,在Javascript中,有两种方法可以声明单个变量: (function scope() { var x; document.getElementById('myId').addEventListener('click', function(e) { x = this.innerHTML; }); })(); 声明var-myVariable然后赋值myVariable=1234稍后在代码中 一行中的声明和赋值var myVariable=123

因此,在Javascript中,有两种方法可以声明单个变量:

(function scope() {
    var x;
    document.getElementById('myId').addEventListener('click', function(e) {
        x = this.innerHTML;
    });
})();
  • 声明
    var-myVariable然后赋值
    myVariable=1234稍后在代码中
  • 一行中的声明和赋值
    var myVariable=1234
  • 对于第一种方法,如果声明变量,则其值为
    未定义
    ,直到将其赋值。因此,如果它还没有被分配,它基本上是一文不值的。为什么会有人做第一类声明

    在一个相关的注释中,为什么JavaScript和我猜任何这样的语言(C,C++等)都有声明和赋值(相对于Python类赋值<代码> MyValue= 1234 ),因为变量,即使声明,在分配之前是无用的,

    为什么会有人做第一类声明

    为了从代码中其他级别的作用域访问此变量,通常会进行这种声明

    //higher-scope variable
    var name;
    
    function setName(_name){
         //Usage at a lower scope
         name = _name;
    }
    
    用法:

        //Notice how I use the "higher scope" variable at the
        //function and out of the functions - different scopes!
    
            setName("David");
            alert(name);
    
    为什么会有人做第一类声明

    为了从代码中其他级别的作用域访问此变量,通常会进行这种声明

    //higher-scope variable
    var name;
    
    function setName(_name){
         //Usage at a lower scope
         name = _name;
    }
    
    用法:

        //Notice how I use the "higher scope" variable at the
        //function and out of the functions - different scopes!
    
            setName("David");
            alert(name);
    

    有时人们喜欢将所有变量声明分组在函数的顶部,以模拟“变量”的实际情况


    如果所需的初始化值还未知,则显然无法使用该值初始化。

    有时人们喜欢将所有变量声明分组在函数顶部,以模拟“变量”的实际情况


    如果所需的初始化值未知,则显然无法使用该值初始化。

    在解释器到达指定值的行之前,您的变量将保持
    未定义

    所有变量和函数在运行时被提升到各自范围的顶部。本质上,当脚本启动时,页面上的每个变量都将被声明为未定义,并保持这种状态,直到它在某个地方发现自己是一个
    =
    符号


    稍微滚动到
    提升部分
    ,但老实说,整个内容都是非常重要的阅读。

    在解释器到达指定值的行之前,您的变量将保持
    未定义

    所有变量和函数在运行时被提升到各自范围的顶部。本质上,当脚本启动时,页面上的每个变量都将被声明为未定义,并保持这种状态,直到它在某个地方发现自己是一个
    =
    符号


    滚动一点到
    提升部分
    ,但老实说,整个内容都是非常重要的阅读内容。

    下面是一个可以做的示例:

    var myfunc = function(flag){
        var myvar;
        if(flag) myvar = 42;
        else myvar = 0;
        return myvar;
    }
    
    你看,这里myvar是未定义的。没有一个好的理由。另一个例子

    var myvar;
    (function(){
        myvar = 42;
    })()
    
    在另一个脚本中:

    alert(myvar);
    

    这里的var是全局的,而它是在一个异常函数中定义的。

    下面是一个可以执行的示例:

    var myfunc = function(flag){
        var myvar;
        if(flag) myvar = 42;
        else myvar = 0;
        return myvar;
    }
    
    你看,这里myvar是未定义的。没有一个好的理由。另一个例子

    var myvar;
    (function(){
        myvar = 42;
    })()
    
    在另一个脚本中:

    alert(myvar);
    

    这里的var是全局变量,而它是在一个异常函数中定义的。

    之所以可以这样做,是因为您不需要总是给它赋值,但已经想定义变量了。如果以后要分配它,这可能会很有用。例如:

    var myValue;
    if (condition) {
        myValue = 'myString1';
    } else {
        myValue = 'myString2';
    }
    
    首先,您不希望为变量赋值,但希望进一步使用它。然后,您可以将定义放在
    if
    语句之外,然后根据
    if
    语句的不同,为其分配不同的内容。当然,这个例子过于简单,但在类似于这个例子的情况下,这样做可能会很有用

    如果需要生成全局变量,这也很有用:

    (function scope() {
        var x;
        document.getElementById('myId').addEventListener('click', function(e) {
            x = this.innerHTML;
        });
    })();
    

    现在,变量x可以在作用域函数中的任何地方使用。

    之所以可以这样做,是因为您不必总是给它赋值,但已经想定义变量了。如果以后要分配它,这可能会很有用。例如:

    var myValue;
    if (condition) {
        myValue = 'myString1';
    } else {
        myValue = 'myString2';
    }
    
    首先,您不希望为变量赋值,但希望进一步使用它。然后,您可以将定义放在
    if
    语句之外,然后根据
    if
    语句的不同,为其分配不同的内容。当然,这个例子过于简单,但在类似于这个例子的情况下,这样做可能会很有用

    如果需要生成全局变量,这也很有用:

    (function scope() {
        var x;
        document.getElementById('myId').addEventListener('click', function(e) {
            x = this.innerHTML;
        });
    })();
    

    现在,变量x可以在作用域函数中的任何地方使用。

    这里缺少一些东西:

    1) 所有变量声明都被JS interpeter提升到函数的顶部,因此所有变量在赋值之前都是未定义的,即使是在函数后面的同一语句中声明和赋值的变量也是如此。这称为“变量提升”,是Javascript语言的一个特性。因此,在函数顶部定义的变量和函数后面定义的变量之间没有函数上的区别。影响函数可能行为的唯一因素是变量的赋值位置

    因此,由于变量“highting”,类似这样的函数具有两个内联变量声明:

    function(array) {
        for (var i = 0; i < array.length; i++) {
            var el = array[i];
            if (el > 3) {
                array[i] = el * el;
            }
        }
    }
    
    现在,出于可读性目的,我可能会将foundNegative初始化为
    false
    ,但这不是必需的,因为
    undefined
    已经是
    false

    或者,这里有一个示例,您可以显式地检查
    未定义的

    function processLowestPositive(array) {
        var lowestValue;
        array.foreach(function(el) {
            if (el >= 0) { 
                if (lowestValue === undefined) {
                    lowestValue = el;
                } else if (el < lowestValue) {
                    lowestValue = el;
                }
            }
        });
        // if there was a positive value found
        if (lowestValue !== undefined) {
            // process the lowest positive value
        }
    }
    
    函数processLowestPositive(数组){
    风险最低