声明两次相同的变量。哪一个用过? - JAVASCRIPT [复制]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了声明两次相同的变量。哪一个用过? - JAVASCRIPT [复制]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

由于第二个声明将覆盖第一个声明,因此下面的代码将生成8。对!完全有道理。

例1

function foo(){
    function bar() {
        return 3;
    }
    return bar();
    function bar() {
        return 8;
    }
}
console.log(foo()); // ---> 8

以下代码生成3,这意味着它是第一个被调用的表达式。

例2

function foo(){
    var bar = function() {
        return 3;
    };
    return bar();
    var bar = function() {
        return 8;
    };
}
console.log(foo()); // ---> 3

我倾向于得出结论,在javascript中,只使用了第一个声明的变量,如上所示。但是,下面的代码会产生7(嗯......抓我的头)

例3

var a = 4;
var a = 7;
console.log(a); //---> 7

最后,我将使用letconst(以防止多次声明相同的变量)来声明变量而不是var,但我试图理解为什么示例2和3中产生的结果是如此不可预测。谢谢。

答案

示例1等同于以下代码。这里barreturn之前被覆盖,因此它将使用分配给它的最后一个值进行评估。关于你的更多信息,请阅读Variable and Function Hoisting

function foo(){
    function bar() {
        return 3;
    }
    
    function bar() {
        return 8;
    }
    
    return bar(); 
}
console.log(foo()); 
另一答案

不,你宣布这些功能只是一个区别。

这正是var functionName = function() {}function functionName() {}之间的区别

考虑你有两个功能。

var function1 = function() {

};
function function2() {

}

不同之处在于function1是一个函数表达式,因此仅在达到该行时定义。

function1();
var function1 = function() {

};

当编译器到达此行时将抛出类似function1的错误。

function2是一个功能声明,它是全球性的(由于悬挂)。

function2();
function function2() {

}

此代码将调用function2函数。

所以,在你的第一个例子中,它与function2(有一个函数声明)相同。

在你的第二个例子中,它与function1相同(有一个函数表达式)

以上是关于声明两次相同的变量。哪一个用过? - JAVASCRIPT [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 JavaScript 的不同 for 循环中声明相同的变量两次吗? [复制]

代码结构

props 被两次添加到在 React / Javascript 中的组件外部声明的数组变量中

js声明引入和变量声明和变量类型变量

复制相同值两次时,可写计算变量不读取值

显式声明和隐式声明都是啥时候用?该用哪一个?