Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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逻辑指南_Javascript - Fatal编程技术网

JavaScript逻辑指南

JavaScript逻辑指南,javascript,Javascript,我有一个小函数逻辑输出应该是1,但我得到了10。。有人能帮我解释一下这个逻辑吗 var a=1; function foo() { if(!a){ var a=10; } console.log(a); } foo(); 输出是10而不是1。怎么做。这是因为一种叫做“提升”的东西 JS这样解释您的代码 var a=1; function foo(){ var a; if(!a){ a=10; } console.log(a);

我有一个小函数逻辑输出应该是1,但我得到了10。。有人能帮我解释一下这个逻辑吗

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

输出是10而不是1。怎么做。

这是因为一种叫做“提升”的东西

JS这样解释您的代码

var a=1;
function foo(){
  var a;
  if(!a){
    a=10;
  }
  console.log(a);
}
foo();
除了在其他答案中提到的以外,请记住,在编写ES6时(通过使用
let
const
),您的代码将按照预期的方式运行

为什么会发生这种情况?因为
const
具有块级作用域,而不是函数级作用域。
设a=1;
函数foo(){
如果(!a){
设a=10;
}
控制台日志(a);
}

foo()我建议你先自己做一些研究。你有两个变量名为
a
。为什么?@Lexi-这就是问题所在。如果我有一个then dnt go in if条件,如果不是一个is declare,那么就声明一个..删除
var
部分,你就会得到你期望的输出