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

  1. <a name="FDK7K"></a>
  2. # 函数的基础性质
  3. <a name="Sl0qA"></a>
  4. ### 默认参数
  5. <a name="R865w"></a>
  6. #### 什么是默认参数
  7. - 函数的参数**如果没有被传递**,那么**函数将隐式的使用undefined作为默认值**。
  8. <a name="H7XI3"></a>
  9. #### 可以用作默认参数的值
  10. 1. **原始值或对象:**number,string,boolean,object,array,`null`
  11. 1. **调用函数的结果**。
  12. 1. **函数定义**
  13. <a name="pZnia"></a>
  14. #### 注意点
  15. - 注意函数**默认值会覆盖**最为函数的参数传递的**undefined**。
  16. - 在默认参数中创建的任何对象都将在每次调用函数时创建。
  17. - 参数中使用的值可以在任何后续的默认参数中使用,从左到右。
  18. ```javascript
  19. function test (a=5){
  20. console.log(a)
  21. }
  22. test() // 5
  23. test(10) // 10
  24. test(null) // null
  25. test(undefined) //5
  26. function createUser(name, rank, userObj = { name, rank }) {
  27. return userObj
  28. }
  29. function defaultFirst(a = 1, b) {
  30. return a + b
  31. }
  32. efaultFirst(undefined, 2) // 3
  1. function getRandomNumber() {
  2. return Math.floor(Math.random() * 10)
  3. }
  4. function cube(x = getRandomNumber()) {
  5. return x * x * x
  6. }
  7. cube() // 111
  8. cube() // 222
  1. function outer(
  2. parameter = function inner() {
  3. return 100
  4. }
  5. ) {
  6. return parameter()
  7. }
  8. // Invoke outer function
  9. outer() // 100
  1. // 避免由于为传递参数造成的结构错误
  2. function settings(options = {}) {
  3. const { theme, debug } = options
  4. // Do something with settings
  5. }

调用函数

以`来调用函数

  1. function H1(arr, ...raw) {
  2. console.log(arr, raw)
  3. }
  4. H1`arg1${1},arg2${2}arg3`
  5. //["arg1", ",arg2", "arg3"] [1, 2]

思考题

  1. (function (){}).length // 函数的length属性表示函数的形参,为零