引言
当我们日常开发时,函数声明和函数表达式很常见,
那他们到底有啥区别呢?
函数声明(ES6)
function declare(val) {
return val;
}
变量提升:函数声明会被提升到作用域的最前面
函数表达式(ES5)
var expression = function (val) {
return val;
}
不存在变量提升,在引用的时候才解析函数,表达式赋值完成后才能调用
变量本身不做为一个函数存在,而是一个匿名函数的引用(值类型的不属于引用)
例子
console.log(f1()); // 输出:declare
var f1 = function () {
return 'expression';
}
console.log(f1()); // 输出:expression
function f1() {
return 'declare';
}
总结
Javascript中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。 所以,函数声明和函数表达式如果同名。由于函数声明的提升,函数表达式就会覆盖掉原来的函数声明。