变量提升(Hosting)
已知如下代码:
<script>
var name='tom';
(function(){
console.log(name);//输出undefined
var name='tim';
})();
</script>
JavaScript中,变量的声明将被提升到函数的最顶部,所以上面代码其实质应为:
<script>
var name='tom';
(function(){
var name; //没有赋值为无定义,下边输出undefined。
console.log(name);//输出undefined,为什么?做变量提升,浏览器内部的机制
name='tim';
})();
</script>
函数提升
已知如下代码:
<script>
test();//方法定义在下面,但浏览器认为定义在了上边。
function test(){
console.log("Tom"); //输出tom
};
</script>
在JavaScript中,函数定义式声明的函数会被提升到最顶部执行,变量式声明的函数则不会,如下代码:
<script>
test();
var test=function(){
console.log("Tom");
}
</script>
<script>
var test;
test();
var test=function(){
console.log("Tom");
}
</script>