声明两次相同的变量。哪一个用过? - 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
最后,我将使用let
或const
(以防止多次声明相同的变量)来声明变量而不是var
,但我试图理解为什么示例2和3中产生的结果是如此不可预测。谢谢。
示例1等同于以下代码。这里bar
在return
之前被覆盖,因此它将使用分配给它的最后一个值进行评估。关于你的更多信息,请阅读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 循环中声明相同的变量两次吗? [复制]