# 函数功能

执行下面的代码，定义并调用指定函数。

```javascript
function func() {
    return 233;
}
console.log(func());
```

执行下面的代码，计算两个整数之和。

```javascript
function sum(x, y) {
    return x + y;
}
console.log(sum(233, 666));
```

执行下面的代码，为函数指定默认参数。

```javascript
function sum(x = 0, y = 0) {
    return x + y;
}
console.log(sum(233, 666));
console.log(sum());
```

执行下面的代码，获取函数的剩余参数。

```javascript
function func1() {
    console.log(arguments);
}
func1(1, 2, 3);

function func2(...args) {
    console.log(args);
}
func2(1, 2, 3);
```

执行下面的代码，定义并调用匿名函数。

```javascript
let func1 = function() {
    return 233;
}
let func2 = function(x, y) {
    return x + y;
}
console.log(func1());
console.log(func2(233, 666));
```

执行下面的代码，定义并调用立即执行函数。

```javascript
(function() {
    console.log('Hello World!');
})();
(function(x, y) {
    console.log(x + y);
})(233, 666);
```

执行下面的代码，定义并调用定时器函数。

```javascript
let timer1 = setTimeout(function() {
    console.log('Hello World!');
}, 3000);
let timer2 = setInterval(function() {
    console.log('Hello JavaScript!');
}, 3000);

function func() {
    console.log(233);
}
let timer3 = setInterval(func, 3000);
```

执行下面的代码，定义并调用闭包函数。

```javascript
function outer() {
    let num = 233;

    function inner() {
        console.log(num);
    }
    return inner;
}
const func = outer();
func();
```

执行下面的代码，定义并调用箭头函数。

```javascript
const func1 = () => {
    console.log('Hello World!');
}
func1();
const func2 = num => {
    console.log(num);
}
func2(233);
const func3 = num => console.log(num);
func3(666);
const func4 = num => num * 2;
console.log(func4(1.23));
```

执行下面的代码，定义并调用生成器函数。

```javascript
function* func() {
    yield 1;
    yield 2;
    yield 3;
}
for (let v of func()) {
  console.log(v);
}
```
