变量提升(Hosting)
已知如下代码:
<script type="text/javascript">
var name='Tom';
(function(){
console.log(name);//输出undefined,为什么?
var name='Tim';
})();
</script>
输出
JavaScript中,变量的声明将被提升到函数的最顶部,所以上面代码其实质应为:
<script type="text/javascript">
var name='Tom';
(function(){
var name;
console.log(name);//输出undefined,为什么?
name='Tim';
})();
</script>
在匿名函数的内部变量的声明提升到了函数的顶部
函数提升
已知如下代码
<script type="text/javascript">
print();//方法定义在下面,但为什么可以这样被调用呢?
function print(){
console.log("Tom");
};
</script>
输出
在JavaScript中,函数定义式声明的函数会被提升到最顶部执行,变量式声明的函数则不会,代码如下
<script type="text/javascript">
prit();//程序运行,该行代码报错:"Uncaught TypeError: undefined is not a function"
var prit = function (){
console.log("Tom");
};
</script>
输出
Uncaught TypeError: undefined is not a function