JavaScript创建函数的20种方法详解
83 浏览量
更新于2024-08-31
收藏 46KB PDF 举报
"这篇文章主要汇总了JavaScript中创建函数的20种方法,涵盖了从基本的函数声明、函数表达式到对象方法、构造函数等多种技术,旨在帮助开发者更好地理解和运用JavaScript的函数特性。"
在JavaScript中,函数是第一类对象,这意味着它们可以作为变量存储、作为参数传递以及作为其他函数的返回值。以下是JavaScript创建函数的20种方式的简要概述:
1. 函数声明:
```javascript
function sayHello() {
console.log('hello');
}
```
这是最常见的函数声明方式,可以在代码的任何位置调用。
2. 函数表达式(匿名函数):
```javascript
var sayHello = function() {
console.log('hello');
};
```
这种方式创建的函数不会被提升到作用域的顶部。
3. 立即执行函数表达式(IIFE):
```javascript
(function() {
console.log('hello');
})();
```
IIFE可以在定义后立即执行,常用于封装局部变量。
4. 匿名函数赋值给变量:
```javascript
var sayHello = function() {};
sayHello = function() {
console.log('hello');
};
```
可以在运行时改变函数的定义。
5. 函数对象属性:
```javascript
var Action = {
sayHello: function() {
console.log('hello');
},
leave: function() {
console.log('goodbye');
}
};
Action.sayHello();
```
将函数作为对象的属性,便于组织和调用。
6. 构造函数:
```javascript
function Action() {}
Action.prototype.sayHello = function() {
console.log('hello');
};
Action.prototype.leave = function() {
console.log('goodbye');
};
var a = new Action();
a.sayHello();
```
使用构造函数和原型链创建可复用的对象。
7. 箭头函数:
```javascript
const sayHello = () => console.log('hello');
```
ES6引入的箭头函数,语法简洁且this指向有别于普通函数。
8. Function构造函数:
```javascript
var sayHello = new Function('console.log("hello")');
sayHello();
```
使用Function构造函数动态创建函数,但不推荐,因为性能较差且易引发安全问题。
9. bind方法:
```javascript
var sayHello = function(name) {
console.log('hello ' + name);
}.bind(null, 'John');
sayHello(); // hello John
```
bind方法可以固定函数的this和部分参数。
10. call/apply方法:
```javascript
var obj = {name: 'John'};
var sayHello = function(name) {
console.log('hello ' + name);
};
sayHello.call(obj); // hello John
sayHello.apply(obj); // hello John
```
call和apply可以改变函数调用时的上下文(this)并传入参数。
11. 闭包:
```javascript
function outer() {
var name = 'John';
return function() {
console.log('hello ' + name);
};
}
var inner = outer();
inner(); // hello John
```
闭包可以让内部函数访问外部函数的变量,即使外部函数已经执行完毕。
12. rest参数:
```javascript
function greet(...args) {
args.forEach(arg => console.log('hello ' + arg));
}
greet('John', 'Jane'); // hello John, hello Jane
```
ES6引入的rest参数允许函数接收不定数量的参数,将其作为一个数组。
13. 默认参数:
```javascript
function sayHello(name = 'world') {
console.log('hello ' + name);
}
sayHello(); // hello world
```
ES6引入的默认参数,当函数调用时未提供参数,则使用默认值。
14. 解构赋值:
```javascript
function sayHello({name}) {
console.log('hello ' + name);
}
sayHello({name: 'John'}); // hello John
```
可以直接从对象中解构出参数。
15. generator函数:
```javascript
function* generateHello() {
yield 'hello';
}
var gen = generateHello();
console.log(gen.next().value); // hello
```
generator函数可以用于创建迭代器,支持异步编程。
16. async/await:
```javascript
async function sayHelloAsync() {
await Promise.resolve().then(() => console.log('hello'));
}
sayHelloAsync();
```
ES7引入的异步函数,使得异步操作更加直观。
17. module.exports/export导出:
```javascript
// in module.js
function sayHello() {
console.log('hello');
}
exports.sayHello = sayHello;
// in main.js
var module = require('./module');
module.sayHello();
```
在Node.js中,使用模块系统导出和导入函数。
18. class关键字:
```javascript
class Action {
sayHello() {
console.log('hello');
}
leave() {
console.log('goodbye');
}
}
let action = new Action();
action.sayHello();
```
ES6的类语法,提供了更面向对象的写法。
19. decorator装饰器:
```javascript
function log(target, name, descriptor) {
var originalMethod = descriptor.value;
descriptor.value = function() {
console.log(`Calling "${name}" with`, arguments);
return originalMethod.apply(this, arguments);
};
return descriptor;
}
class Action {
@log
sayHello() {
console.log('hello');
}
}
let action = new Action();
action.sayHello(); // Calling "sayHello" with []
```
装饰器可以修改或增强对象、属性或方法的行为。
20. 模块导出默认方法:
```javascript
// in module.js
export default function sayHello() {
console.log('hello');
}
// in main.js
import sayHello from './module';
sayHello();
```
ES6模块系统中的默认导出,允许一次导入整个模块。
以上20种方式展示了JavaScript在创建和使用函数方面的灵活性和多样性,可以根据实际需求选择适合的方法。在编写JavaScript代码时,理解这些技巧将有助于写出更高效、可维护的代码。
2020-12-11 上传
2011-05-04 上传
2008-11-30 上传
2024-10-26 上传
2023-07-28 上传
2023-04-02 上传
2023-06-06 上传
2024-10-04 上传
2024-10-11 上传
weixin_38723027
- 粉丝: 9
- 资源: 987
最新资源
- MATLAB新功能:Multi-frame ViewRGB制作彩色图阴影
- XKCD Substitutions 3-crx插件:创新的网页文字替换工具
- Python实现8位等离子效果开源项目plasma.py解读
- 维护商店移动应用:基于PhoneGap的移动API应用
- Laravel-Admin的Redis Manager扩展使用教程
- Jekyll代理主题使用指南及文件结构解析
- cPanel中PHP多版本插件的安装与配置指南
- 深入探讨React和Typescript在Alias kopio游戏中的应用
- node.js OSC服务器实现:Gibber消息转换技术解析
- 体验最新升级版的mdbootstrap pro 6.1.0组件库
- 超市盘点过机系统实现与delphi应用
- Boogle: 探索 Python 编程的 Boggle 仿制品
- C++实现的Physics2D简易2D物理模拟
- 傅里叶级数在分数阶微分积分计算中的应用与实现
- Windows Phone与PhoneGap应用隔离存储文件访问方法
- iso8601-interval-recurrence:掌握ISO8601日期范围与重复间隔检查