《JavaScript高级程序设计》笔记-3.7

186 阅读2分钟

完成于2020年5月22日

函数

语法:

function functionName(arg0, arg1, ...argN) {
  statements
}

调用方式:

functionName(arg0, arg1, ...argN)

返回值:函数通过return语句来实现返回值。位于return语句之后的任何代码都永远不会执行。

function sum(num1, num2) {
  return num1 + num2;
  alert(num1); // 不会执行
}
sum(4, 5)

return语句也可以不带任何返回值。这种用法一般用在需要提前停止函数执行而又不需要返回值的情况下。

function sum(num1, num2) {
  return;
  alert(num1); // 不会执行
}

严格模式 对函数的限制,会导致语法错误。代码无法执行

  • 不能把函数命名为eval和arguments;
  • 不能把参数命名为eval和arguments;
  • 不能出现两个命名参数同名的情况。

参数

ECMAScript函数的参数在内部是用数组表示的。不介意参数的个数和类型。可以用个arguments对象来访问这儿数组。 arguments是类数组,可以通过方括号来访问每个元素。可以用length来访问个数。 函数的命名参数只是提供便利,不是必须的。arguments对象可以和命名参数同时使用。

function sum (num1) {
  alert(arguments.length) // 2
  return num1 + arguments[1] //30
}
sum (10, 20)

可以利用函数参数的个数不同来实现不同的功能

function sum () {
  if(arguments.length = 1){
    retuen arguments[0]++ 
  }else{
    return arguments[0] + arguments[1] 
  }
}
sum (5)       // 6
sum (10, 20)  // 30

arguments的值和命名参数的值保持同步,内存空间的独立的。 arguments对象的长度由参数的个数决定。传入几个参数就是几,和命名参数无关。 如果只传递一个参数,arguments[1]设置的值不会传递到命名参数中。

function sum (num1, num2) {
  arguments[1] = 10
  return arguments[0] + arguments[1] 
}
sum (10, 20)  // 20

没有传递值的命名参数默认为undefined 严格模式 重新赋值arguments的值会导致语法错误

没有重载

重载:为一个函数编写两个定义,只要参数的类型和数量不同。 ECMAScript函数不能实现重载。相同名字的函数,最后一个会覆盖之前的函数。只会执行最后的函数。 可以通过参数的类型和个数使用arguments来做出不同反应。