Function构造函数
- Function() 与 new Function()等价 ```javascript var a = 10; var b = 20;
var test = Function(“a”,”b”,”return a + b”) var test2 = new Function(“a”,”b”,”return a + b”)
test.proto === Function.prototype // true Function.proto===Function.prototype // true
<a name="FDK7K"></a>
# 函数的基础性质
<a name="Sl0qA"></a>
### 默认参数
<a name="R865w"></a>
#### 什么是默认参数
- 函数的参数**如果没有被传递**,那么**函数将隐式的使用undefined作为默认值**。
<a name="H7XI3"></a>
#### 可以用作默认参数的值
1. **原始值或对象:**number,string,boolean,object,array,`null`
1. **调用函数的结果**。
1. **函数定义**
<a name="pZnia"></a>
#### 注意点
- 注意函数**默认值会覆盖**最为函数的参数传递的**undefined**。
- 在默认参数中创建的任何对象都将在每次调用函数时创建。
- 参数中使用的值可以在任何后续的默认参数中使用,从左到右。
```javascript
function test (a=5){
console.log(a)
}
test() // 5
test(10) // 10
test(null) // null
test(undefined) //5
function createUser(name, rank, userObj = { name, rank }) {
return userObj
}
function defaultFirst(a = 1, b) {
return a + b
}
efaultFirst(undefined, 2) // 3
function getRandomNumber() {
return Math.floor(Math.random() * 10)
}
function cube(x = getRandomNumber()) {
return x * x * x
}
cube() // 111
cube() // 222
function outer(
parameter = function inner() {
return 100
}
) {
return parameter()
}
// Invoke outer function
outer() // 100
// 避免由于为传递参数造成的结构错误
function settings(options = {}) {
const { theme, debug } = options
// Do something with settings
}
调用函数
以`来调用函数
function H1(arr, ...raw) {
console.log(arr, raw)
}
H1`arg1${1},arg2${2}arg3`
//["arg1", ",arg2", "arg3"] [1, 2]
思考题
(function (){}).length // 函数的length属性表示函数的形参,为零