函数的提升
定义函数的两种方法:
- 第一种直接定义 function fun()
- 可以用在后面定义函数,在定义函数的前面可以正常进行函数的调用,不会产生变量提升导致的not a function问题
- 第二种利用var关键字定义 var fn1 = function()
- 只能在函数定义之后调用,如在函数定义前使用会产生函数提升报错!!!
fun();
function fun(){
console.log("yes")
}
利用function直接定义和的函数,在函数定义前被调用,不会产生函数提升的问题,效果如下:
<script>
fn() ;
var fn = function(){
console.log("yes")
}
</script>
利用var关键字定义的函数不可以在函数定义前被调用,容易产生函数的提升,结果如下:
变量的提升
变量的两种情况
- 全局变量:定义在函数体外部,作用在全局
- 局部变量:定义在函数体内部,仅作用在函数体内部
为什么会产生变量提升:
- 在函数内部利用var 关键字定义一个与全局变量同名的一个变量
- 并且在定义前对这个变量进行输出,会导致变量的提升,相当于在函数体内var x;对它进行声明
var a = 5;
function fun(){
console.log(a); //undefined
var a = 10;
console.log(a); // 10
}
fun();
console.log(a); // 5
在函数体内部对全局变量进行修改:
var b = 3;
function fn(){
console.log(b);// 3
b = 8;
console.log(b);// 8
}
fn();
console.log(b);// 8