JavaScript逻辑指南

时间:2017-10-11 15:46:53

标签: javascript

我的小功能逻辑输出应该是1但我得到10 ..任何人都可以用这个逻辑来帮助我。

var a=1;
function foo() {
    if(!a){
        var a=10;
    }
    console.log(a);
}
foo();

输出10而不是1。如何。

2 个答案:

答案 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时(使用letconst),您的代码将按预期运行。< / p>

为什么会这样?因为letconst具有块级范围,而不是函数级范围。

&#13;
&#13;
let a = 1;

function foo() {
  if (!a) {
    let a = 10;
  }
  console.log(a);
}

foo();
&#13;
&#13;
&#13;

这就是为什么当您使用JavaScript linting机制(如ESLint)时,您会看到vars-on-tophttps://eslint.org/docs/rules/vars-on-top)等规则,专门用于避免这些类型的问题。