为什么这个javascript代码片段,outerString输出“undefined”?

时间:2015-07-14 07:00:27

标签: javascript

var outer = 'outer';

function fn1() {
  var outerString = outer;
  var outer = 'inner';

  console.log( outerString );
  console.log( outer );
}

fn1();

为什么是outerString; //未定义?

6 个答案:

答案 0 :(得分:2)

这是因为variable hosting,因为你已经在里面声明了变量,所以不会引用外部范围变量。

您的代码看起来像

var outer = 'outer';

function fn1() {
  var outer, outerString; //these are declared in the local scope but not yet initialized
  outerString = outer;//now outer has undefined as its value
  outer = 'inner';

  console.log( outerString );
  console.log( outer );
}

fn1();

答案 1 :(得分:1)

这里有三件事:

  1. <{1}} 里面的函数是阴影(隐藏)你在函数外声明的var outer变量。

  2. 甚至在函数outer之前就会发生这种情况,因为var outer 被提升到它所写的范围的顶部(函数声明也是如此)

  3. 创建变量时,它以值var开头。看起来像变量初始化(undefined)实际上只是在逐步运行代码时发生的赋值。

  4. 您的代码看起来真的像JavaScript引擎:

    var x = 42

    更多(在我的博客上)Poor, misunderstood var

答案 2 :(得分:0)

在执行任何代码之前处理变量声明(以及一般的声明),在代码中的任何地方声明变量等同于在顶部声明它。 read

上面的

表格可以在定义<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <select class="height_selected" id="renderHeight"> <option>Select Height</option> <option value="1">123 cm</option> <option value="2">125 cm</option> </select>时得出结论outerundefined

答案 3 :(得分:0)

因为在调用outerString时调用变量outer;意思是outerString正在寻找一个尚不存在的变量。

将其更改为

var outer =&#39; inner&#39;;

var outerString = outer;

答案 4 :(得分:0)

请参阅以下评论: 这就是javascript执行代码的方式。

var outer;
    outer = 'outer';

function fn1() {
  var outerString;
  var outer;

  /**** Here outer is declared locally but not defined ****/
  /**** Because you defined var outer inside the function so it takes the local value which is declared but not defined. ****/

  /**** Locally outer variable is defined but your are trying to assign it to outerString before defining it ****/      

  outerString = outer;         // Local variable outer
  outer = 'inner';             // This is the point where you are defining the outer in local scope.


  console.log( outerString );  // Undefined as outerString was assigned a variable which was declared but not defined.
  console.log( outer );        // This was defined locally also hence gives out value.
}

fn1();

答案 5 :(得分:0)

首先,删除函数内部的var外部,已经将var声明为外部,因此无需再次执行此操作。只写外在=“内在”;那就足够了。