考虑这两个不同版本的吊装......
mylocation = "dublin"
function outputPosition() {
alert(mylocation);
mylocation = "fingal" ;
alert(mylocation);
}
outputPosition();
这将输出“fingal”然后“fingal”
mylocation = "dublin"
function outputPosition() {
alert(mylocation);
var mylocation = "fingal" ;
alert(mylocation);
}
outputPosition();
这将输出“undefined”和“fingal”
为什么?
答案 0 :(得分:6)
在javascript函数中使用var
关键字声明变量后,无论您在何处放置此声明 - 在函数顶部或按钮处,它都将被视为局部变量。因此,当您尝试在undefined
声明之前获取此类变量的值时,您会获得var
。
答案 1 :(得分:5)
在第二个选项中,您通过mylocation
声明隐藏var
(我希望在外部范围内声明。)。
“在JavaScript中,变量可以在使用后声明。”含义:JavaScript将var
声明提取到范围的顶部(无论在何处声明它!),因此在第二个函数var mylocation
中隐式定义但未在第一个警报之前分配,因此在此时输出undefined
。
答案 2 :(得分:0)
第一个片段的输出必须是“dublin”和“fingal”,前提是mylocation已定义,否则为参考错误。
更多详情:
http://bustingseams.blogspot.in/2009/08/another-javascript-pitfall-hoisting.html
答案 3 :(得分:0)
在JavaScript中 - 变量声明是悬挂,但初始化不是。
这意味着当你在函数内的任何地方写var
时,它将被视为在top中声明。所以它不会从全局空间中获取相同的名称变量。
@Ashish是对的,第一个片段应输出“dublin”和“fingal”。
答案 4 :(得分:0)
以例如:
x = 5;
var x;
console.log( x );
从技术上讲,你可能希望在这个上下文中将x = 5;
视为一个错误的语句,考虑到它在声明之前,但JS引擎不会那样工作。它将x = 5
和var x
视为两个单独的语句,第一个是与编译器相关的任务,第二个是与执行相关的任务。
这简单来说意味着范围中的所有声明,无论它们出现在何处,都会在代码本身执行之前先处理。即你可以在声明变量之前执行变量。