JS中的变量提升
先来看一个面试题目
var v='Hello World';
(function(){
alert(v);
var v='I love you';
})()
面试官问你这个结果是多少?你怎么回答?
实际结果是----undefined
原因是什么呢?这其实就是JS中的变量提升,就是把定义在后面的东东(变量或函数)提升到前面中定义。
比如,我们定义三个变量
(function(){
var a='One';
var b='Two';
var c='Three';
})()
实际上,JS内部运作时,由于变量提升,他是这样的
(function(){
var a,b,c;
a='One';
b='Two';
c='Three';
})()
最上面那个面试题为啥会报undefined呢?
var v='Hello World';
(function(){
var v;
alert(v);
v='I love you';
})()
所以,在写js code 的时候,我么需要把变量放在块级作用域的顶端
var v='Hello World';
(function(){
var v = 'I love you';
alert(v);
})()
函数提升 :函数提升是把整个函数都提到前面去。在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。
成功:
function myTest(){
foo();
function foo(){
alert("我来自 foo");
}
}
myTest();
失败:
function myTest(){
foo();
var foo =function foo(){
alert("我来自 foo");
}
}
myTest();