生成随机颜色
const generateRandomHexColor = () => `#${Math.floor(Math.random() * 0xffffff).toString(16)}`
console.log(generateRandomHexColor())
复制到剪切板
const copyToClipboard = (text) => navigator.clipboard && navigator.clipboard.writeText && navigator.clipboard.writeText(text)
copyToClipboard("Hello World!")
滚动到顶部
const scrollToTop = (element) =>
element.scrollIntoView({ behavior: "smooth", block: "start" });
滚动到底部
const scrollToBottom = (element) =>
element.scrollIntoView({ behavior: "smooth", block: "end" });
JavaScript 函数是执行特定任务的代码块,它们可以接受输入(参数)并返回输出(返回值)。JavaScript 函数具有许多特性和用法,以下是关于 JavaScript 函数的一些重要概念和特性:
1. 函数定义
你可以使用 function
关键字来定义一个函数:
javascript复制代码
function myFunction(param1, param2) {
// 函数体,执行特定任务的代码
return param1 + param2;
}
或者使用箭头函数(ES6+):
javascript复制代码
const myFunction = (param1, param2) => {
// 函数体,执行特定任务的代码
return param1 + param2;
};
2. 函数参数
函数可以接受任意数量的参数,参数是可选的,并且在函数体内通过变量名来访问。
3. 函数返回值
函数可以使用 return
语句来返回一个值。如果没有 return
语句,或者 return
后面没有跟任何值,那么函数将返回 undefined
。
4. 函数作用域
JavaScript 函数有自己的作用域,这意味着在函数内部定义的变量和函数只在该函数内部可见。函数作用域也决定了变量和函数的生命周期。
5. 匿名函数
没有名称的函数称为匿名函数,它们经常作为回调函数使用。
javascript复制代码
const myCallback = function(value) {
console.log(value);
};
6. 立即执行函数表达式 (IIFE)
这是一种定义并立即执行函数的模式,通常用于创建独立的作用域,防止变量污染全局作用域。
javascript复制代码
(function() {
// 这里的代码将立即执行,并且有自己的作用域
})();
7. 闭包
闭包是一个函数有权访问另一个函数的变量和作用域的能力,即使该函数已经执行完毕。闭包在 JavaScript 中是非常强大的概念,它们使得函数能够“记住”并访问其词法作用域,即使该函数在其词法作用域之外执行。
8. 回调函数
回调函数是一个被作为参数传递给另一个函数的函数,并在需要时被调用。它们经常用于异步操作,例如定时器、事件监听器和 AJAX 请求。
9. 高阶函数
高阶函数是接受函数作为参数或返回函数的函数。JavaScript 中的许多内置函数(如 Array.prototype.map
、Array.prototype.filter
等)都是高阶函数。
10. 生成器和异步函数
生成器(使用 function*
定义)和异步函数(使用 async function
定义)是 ES6 引入的两种特殊类型的函数,用于处理复杂的控制流,特别是与异步操作相关的控制流。
11. 函数作为对象
在 JavaScript 中,函数实际上是一种特殊的对象。这意味着函数可以有属性和方法,就像其他对象一样。例如,你可以给函数添加一个属性或方法,并在需要时访问它。
javascript复制代码
function myFunction() {
// 函数体
}
myFunction.myProperty = 'Hello, World!';
console.log(myFunction.myProperty); // 输出: Hello, World!
12. 函数的调用
函数的调用是通过在函数名称后面加上一对圆括号(()
)来完成的。调用函数会执行函数体内的代码,并可能返回一个值。
javascript复制代码
function greet(name) {
return `Hello, ${name}!`;
}
const message = greet('Alice'); // 调用函数并赋值给变量
console.log(message); // 输出: Hello, Alice!
13. 默认参数和剩余参数
ES6 引入了默认参数和剩余参数的概念,使得函数参数的处理更加灵活。默认参数允许你为函数参数指定默认值,而剩余参数则允许你接收任意数量的参数并将其作为数组处理。
javascript复制代码
function greet(name = 'Guest') {
return `Hello, ${name}!`;
}
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(greet()); // 输出: Hello, Guest!
console.log(sum(1, 2, 3, 4)); // 输出: 10
14. 函数的构造函数
除了使用 function
关键字定义函数外,你还可以使用 Function
构造函数来创建函数。尽管这种方式不常用,但在某些特殊情况下可能是有用的。
javascript复制代码
const greet = new Function('name', 'return "Hello, " + name;');
console.log(greet('Bob')); // 输出: Hello, Bob