Javascript 为什么在更高的范围内初始化的变量和在当前范围内初始化的变量都没有定义?

Javascript 为什么在更高的范围内初始化的变量和在当前范围内初始化的变量都没有定义?,javascript,Javascript,为什么在更高的范围内初始化的变量和在当前范围内初始化的变量都没有定义 当前代码输出:第一个“未定义”,第二个“我是本地的” 为什么会这样?这个问题是什么?这个问题的名称是什么?它背后的概念是什么 var testVar = "i'm global"; function example( ) { alert(testVar); var testVar = "i'm local"; alert(testVar); } example(); 您的代码与以下各项相等

为什么在更高的范围内初始化的变量和在当前范围内初始化的变量都没有定义

当前代码输出:第一个“未定义”,第二个“我是本地的”

为什么会这样?这个问题是什么?这个问题的名称是什么?它背后的概念是什么

var testVar = "i'm global";
function example( ) {
    alert(testVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example();

您的代码与以下各项相等:

<script type="text/javascript">
   var testVar = "i'm global";
   function example( ) {
      var testVar;
      alert(testVar); 
      testVar = "i'm local";
      alert(testVar);   
    }
    example();     
</script>

var testVar=“我是全球的”;
函数示例(){
var-testVar;
警报(testVar);
testVar=“我是本地人”;
警报(testVar);
}
示例();

因此,第一个
alert
局部变量
testvar
未定义
var
移到作用域的开头。

您只会得到本地的
testVar
,因为当您进入
示例
函数的作用域时,您有
testVar
的声明,所以您会覆盖
testVar
。在第一个
警报
中,您应该得到
未定义的
,因为有
testVar的声明
,但之后是
警报
。在第二个警报中,您将获得本地值,因为已定义了
testVar

要获取外部变量,只需以不同的方式命名或将其作为参数传递:

var testVar = "i'm global";
function example(globalTestVar) {
    alert(globalTestVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example(testVar);     

从局部变量中删除
var
。它使浏览器认为
testVar
是一个局部变量,在发出第一次警报时未定义。

试试这个,它会同时提醒这两个函数,您需要首先在函数内部定义
testVar

 <script type="text/javascript">
    function example( ) {
        var testVar = "i'm global";
        alert(testVar); 
        var testVar = "i'm local";
        alert(testVar);   

     }
         example();     
</script>

函数示例(){
var testVar=“我是全球的”;
警报(testVar);
var testVar=“我是本地人”;
警报(testVar);
}
示例();

就目前的情况来看,这个问题不容易理解,无法回答。你能把问题重新写一遍吗?请不要在问题中使用“it”这个词,这会让人困惑。不要否决,编辑问题以使其更合理,如果阅读字里行间的内容并查看代码,这显然是op想要的。@limelights这样的问题是无可救药的,除非op自己澄清。然而,有4个答案解释了他想要什么。如前所述,我认为你应该改为编辑这个问题,国际海事组织:)这个问题的文本无法理解。但是提供的代码举例说明了JS中的一个经典问题,这是它可以回答的唯一原因。还有为什么它应该作为副本关闭。嗨@hart,你能回答第二个问题吗?此问题的js名称?@Max这称为变量提升。@ahoff这不能解释为什么会发生这种情况。这不能真正解释发生了什么。