作为值的函数
函数可以定义,也可以调用,这是函数最重要的特性。在 JS 中,函数不仅是一种语法,也是值。也就是说,可以将函数赋值给变量,存储在对象的属性或数组的元素中,作为参数传入另一个函数等。
赋值给变量:
function fun(x) {
return x * x;
}
// 调用
fun(5)
这个定义创建一个新的函数对象,并将其赋值给变量
fun
。函数的名字实际上是看不见的。它(fun
)仅仅是变量的名字,这个变量指代函数对象。
赋值给对象的属性:
var obj = {
fun: function(x) { return x * x; }
}
// 调用
obj.fun(5)
函数除了可以赋值给变量,还可以赋值给对象的属性。当函数作为对象的属性调用时,函数就称为方法。
赋值给数组元素:
var arr = [function(x) { return x * x; }, 10]
// 调用
arr[0](arr[1])
自定义函数的属性
JS 的函数并不是原始值,而是一种特殊的对象,也就是说,函数可以拥有属性。当函数需要能够跟踪它每次的返回值,而且这些值的信息需要在不同的函数调用过程中持久化。为了做到这一点,可以将这些信息存放到函数对象的一个属性中。如下:
// 由于函数声明被提前了,因此这里是可以在函数声明之前给它的成员赋值
fun.counter = 0; // 初始化函数对象的计数器属性
// 每次调用这个函数都会返回一个不同的整数
function fun() {
return fun.counter++;
}
setInterval(() => {
console.log(fun());
}, 1000);
![](https://i-blog.csdnimg.cn/blog_migrate/827e0cc3e1257fcaf1cb6d3b80dd4b54.png)
上面代码中,每次调用函数
fun
都能够让counter
加1,实现了对值的跟踪。