var outer = 'outer';
function fn1() {
var outerString = outer;
var outer = 'inner';
console.log( outerString );
console.log( outer );
}
fn1();
为什么是outerString; //未定义?
答案 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}} 里面的函数是阴影(隐藏)你在函数外声明的var outer
变量。
甚至在函数outer
之前就会发生这种情况,因为var outer
被提升到它所写的范围的顶部(函数声明也是如此)
创建变量时,它以值var
开头。看起来像变量初始化(undefined
)实际上只是在逐步运行代码时发生的赋值。
您的代码看起来真的像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>
时得出结论outer
为undefined
。
答案 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声明为外部,因此无需再次执行此操作。只写外在=“内在”;那就足够了。