核心提示:函数声明和函数表达式咋眼一看这个名字以为没有什么区别,其实还是有很大区别的(特别是用法)函数声明是这个样子的 function fn(){ //代码块} fn(); //调用函数表达式是这个样子的//...
函数声明和函数表达式咋眼一看这个名字以为没有什么区别,其实还是有很大区别的(特别是用法)
函数声明是这个样子的
function fn(){
//代码块
}
fn(); //调用
函数表达式是这个样子的
//没有参数
var demo = function fn1(){
//代码块
}
demo(); //正确的调用
fn1(); //错误的调用
//前后两个函数的名字可以相同,也可以不相同
//function后面的这个名字可以省略,并且只能在函数内部使用
//带参
var demo1 = function fn2(a,b){
//代码块
}
demo(fn2(3,5)) //调用
既然知道了函数声明和函数表达式长什么样子了,那么来看看下面这一段代码
test1(); //100
demo1(); //demo1 is not a function
function test1(){
console.log(100);
}
var demo1 = function test2(){
console.log(50);
}
第一眼觉得这么简单啊 肯定输出100和50啊,但是看到旁边的答案就在想为什么是这个答案,其实函数声明和函数表达式有很重要的一点,那就是:
函数声明有函数提升,会在预编译环节把声明和函数体整体提升到执行环境顶部,所以可以在函数声明之前调用这个函数(其实也就是函数可以在任意地方调用)
而函数表达式的调用,只能在函数表达式之后
这两句话就解释了上面输出结果


