我的小功能逻辑输出应该是1但我得到10 ..任何人都可以用这个逻辑来帮助我。
var a=1;
function foo() {
if(!a){
var a=10;
}
console.log(a);
}
foo();
输出10而不是1。如何。
答案 0 :(得分:3)
这是因为所谓的"吊装"。
https://www.w3schools.com/js/js_hoisting.asp
JS解释你的代码
var a=1;
function foo(){
var a;
if(!a){
a=10;
}
console.log(a);
}
foo();
答案 1 :(得分:1)
除了其他答案中提到的hoisting之外,请记住,在编写ES6时(使用let
或const
),您的代码将按预期运行。< / p>
为什么会这样?因为let
和const
具有块级范围,而不是函数级范围。
let a = 1;
function foo() {
if (!a) {
let a = 10;
}
console.log(a);
}
foo();
&#13;
这就是为什么当您使用JavaScript linting机制(如ESLint)时,您会看到vars-on-top
(https://eslint.org/docs/rules/vars-on-top)等规则,专门用于避免这些类型的问题。