函数和变量的声明

变量的声明提前

变量的声明会提前,这个相信大家都知道了,直接上代码:

function testFn(){
    console.log(name);
    var name = 'Bill';
}

这段代码会在控制台打印出undefined,很显然,js中使用一个不存在的变量会报错,然而我们的name是在执行console.log()之后定义的,上面的代码等价于:

function testFn(){
    var name;
    console.log(name);
    name = 'Bill';
}

所以并不会出现错误,这就是变量的生命提前。

函数的声明提前

函数的声明提前和变量的生命提前类似,但是我们在声明函数的时候有两种方式经常使用,一种是JS中的函数声明:

function testFn(){
}

就像这样,而另一种形式是使用表达式的方式声明:

var test = function test () {
}

这两种方式在使用的时候需要注意一下,第一种方式可以在声明函数之前调用函数(因为函数的声明会提前,使得你在调用函数的时候,函数已经存在了),而第二种方式则类似于变量的提前声明,只是声明了test这个变量,但并没有对其赋值,所以当你在声明函数之前调用这个函数时,test虽然存在,但他的值还是undefined,所以会出现错误。