函数声明
# 1.函数的定义
函数是将复用的代码块封装起来的模块,实现一个固定的功能或者是程序,在这个封装体中需要一个入口和一个出口,入口是参数,出口是返回。
# 2.函数声明
// 1. function
function functionName(arg0,arg1,...argN) {
// 函数内执行的语句
}
// 函数表达式又叫字面量
const functionName = function test() { // test 只在函数内可见,可以不写test,如果不写称之为匿名函数
var a = 1;
console.log(a);
}
// 匿名函数
const functionName = function() {
var a = 1;
...
}
functionName(); // 函数执行
函数重复声明
// 当函数重复声明后,后声明的函数覆盖前面的函数
function f() {
console.log(1);
}
f() // 函数执行 2
function f() {
console.log(2);
}
f() // 2
上面的结果有点奇怪?为什么第一个f()执行后也是2呢?接着看
# 2.函数提升
WARNING
函数声明可以提升,函数表达式不可以提升。函数提升优先级高于变量提升。(后面会专门章节记录函数提升和变量提升之间的关系)
// 函数声明可以被提升
f(); // 1
function f() {
console.log(1);
}
// 函数表达式-字面量不可以被提升
f(); // TypeError: f2 is not a function
function f() {
console.log(2);
}
# 3.函数属性和方法
- name属性
function f() {
console.log(f.name); // f
}
const f = function () {
console.log(f.name); // f
}
// name 属性的作用:获取 函数参数的名称
var myFunc = function () {};
function test(f) {
console.log(f.name); // myFunc
}
test(myFunc);
// 将一个函数做为一个参数传递给另一个函数,我们可以通过name属性拿到参数函数的函数名
- length属性
// length:返回函数预期传入的参数个数,即函数定义之中的参数个数(形参)
function f1(a, b) {}
console.log(f1.length) // 2
- toString属性
// toString:返回一个字符串,内容是函数的源码
function f2() {
a();
b();
c();
}
console.log(f2.toString());
// function f2() {
// a();
// b();
// c();
// }