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**。- 在默认参数中创建的任何对象都将在每次调用函数时创建。- 参数中使用的值可以在任何后续的默认参数中使用,从左到右。```javascriptfunction test (a=5){console.log(a)}test() // 5test(10) // 10test(null) // nulltest(undefined) //5function 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() // 111cube() // 222
function outer(parameter = function inner() {return 100}) {return parameter()}// Invoke outer functionouter() // 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属性表示函数的形参,为零
