JavaScript函数的声明
函数概念:是由事件驱动的或者当他被调用时可执行的可重复使用的代码块。
函数常见的两种声明方式
- 声明式:必须以function关键字开头,后跟一组参数以及函数体。
基本语法如下所示:
function 函数名(参数1,参数2,...) {
// 代码
}
// 函数的名字,自定义(遵循变量名的命名规则和命名规范)
// ()是用来放参数的位置,个数 >= 0
// {}是具体需要执行的代码
- 赋值式(函数表达式):使用 var 定义一个变量,把一个函数当作值直接赋值给这个变量就可以了
基本语法如下所示:
var 函数名 = function() {
// 一段代码
}
// 不需要在 function 后面书写函数的名字了
两种声明方式的区别
- 赋值式声明的函数只能声明之后调用(作用域内),因为这种方式声明的函数,是在函数运行的阶段才赋值的。
- 声明式声明的函数可以在声明函数的作用域内任一地方调用,因为这种方式,是在函数解析阶段赋值的
// 声明式
foo(); // 1
function foo() {
console.log(1);
}
foo(); // 1
// 赋值式
foo(); // 报错(TypeError: foo is not a function)
var foo = function() {
console.log(1);
};
foo(); // 1
注意点:
- 当同时使用这两种方式声明同一个函数名,最终执行的是赋值式声明的函数。
// 赋值式
var foo = function() {
console.log(1);
}
// 声明式
function foo (){
console.log(2);
}
foo(); // 1
由于js的预解析机制,即先解释代码,再执行代码
// js实际解读的样子
var foo;
function foo() {
console.log(2);
}
foo = function (){
console.log(1);
};
foo();
- 当声明式函数和变量同名时,函数生效
console.log(foo); // function foo(){}
var foo = 10;
function foo(){}
分析:
// js解析后
var foo;
function foo(){}
foo = 10;
console.log(foo);
声明提升的优先级:先提升变量的声明,然后再提升函数的声明。