目录
函数提升
函数提升是一个有趣的现象,它允许我们在函数声明之前调用它们。这在编写代码时提供了更大的灵活性,尤其是在处理回调函数或者异步编程中非常有用。函数提升只发生在相同作用域的函数之间,而且函数表达式不具有提升现象。
console.log(add(1, 2));
function add(a, b) {
return a + b;
}
函数参数
函数参数的传递在JavaScript中是通过 arguments
对象实现的。这是一个内置的伪数组,它包含了对函数所有参数的引用。在实际开发中,我们常常使用 arguments
来处理不定数量的参数。
function getSum() {
let sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
console.log(sum);
}
getSum(1, 2, 3);
剩余参数
剩余参数的语法是使用 ...
来表示接受任意数量的参数。这使得函数可以有意识地忽略掉不需要的参数。
function curry(...args) {
return function(next) {
return args.concat(next);
};
}
const curryAdd = curry(1, 2);
console.log(curryAdd(3)); // 输出 [1, 2, 3]
扩展-展开运算符
扩展-展开运算符 ...
可以用来将数组或其他可迭代对象的元素展开到数组中。
const arr = [1, 2, 3];
console.log(...arr); // 输出 1 2 3
箭头函数
箭头函数是ES6中引入的一个新特性,它可以让我们以更简洁的方式书写函数。
// 普通函数
function greet() {
console.log('Hello World');
}
// 箭头函数
const greetArrow = () => console.log('Hello World');
greetArrow();
函数的this指向
在JavaScript中,函数的 this
指向是根据函数的调用方式决定的。通常情况下,函数的 this
指向的是全局对象 window
。如果我们想在回调函数中使用 this
指向函数本身,可以使用 Function.prototype.bind()
方法。
function greet() {
console.log('Hello World');
}
greet.bind(greet)(); // 输出 Hello World
严格模式
严格模式可以通过在函数体内添加 "use strict"
语句来开启。在严格模式下,有一些新的限制和行为改变,比如要求所有变量必须使用 var
声明,否则会导致错误。
function inStrictMode() {
"use strict";
console.log("This function is running in strict mode.");
}
inStrictMode();
高阶函数
高阶函数是指接受其他函数作为参数或将函数作为返回值的函数。
function apply(func, args) {
return func.apply(null, args);
}
const applyDiv = apply(/,/);
console.log(applyDiv([1, 2, 3])); // 输出 1 2 3
闭包
闭包是指有权限访问另一个函数作用域中变量的函数。闭包的作用是可以在函数外部访问函数内部的局部变量。
function outer() {
let count = 0;
return function inner() {
console.log(count);
};
}
const closure = outer();
closure();
递归
递归是指函数自己调用自己。递归可以解决一些特定的问题,比如阶乘计算、树遍历等。
function factorial(n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
console.log(factorial(5)); // 输出 120
函数作为参数和返回值
函数可以作为其他函数的参数和返回值。这在设计模块和组件时非常有用。
function map(array, callback) {
return array.map(callback);
}
const mapped = map([1, 2, 3], function(num) {
return num * 2;
});
console.log(mapped); // 输出 [2, 4, 6]