数学上的函数

  1. y = f(x);

js上的函数

编程规范 高内聚(模块里的代码独立性强),低耦合(重复的代码提取出来): 模块的单一责任制

解耦合: 将重复的代码提取出来,比如做成一个函数。

函数基本写法

function declaration

  1. function foo(num1/*formal args1*/){
  2. }
  3. // invoke function foo
  4. foo();
  5. // invoke function foo again
  6. foo();
  7. // 函数被调用时才会被执行
  8. function foo1(){
  9. var a = b = 1;// 错误声明变量,b会被挂载到window上
  10. }

formal arguments

  1. function foo(a, b/*形参*/){
  2. console.log(a+b);
  3. }
  4. foo(1, 2); // 1,2 为实参
  5. // js的参数是一一对应的
  6. foo(1); // "1undefined"

arguments

  1. function foo(){
  2. console.log(foo.length); // 实际的参数长度
  3. console.log(arguments); // 实参伪数组
  4. }
  5. foo(1, 2, 3, 4);

一个函数被调用时,累加他的实参值

  1. function sum(){
  2. var counter = 0;
  3. for (var i = 0; i<arguments.length; i++){
  4. counter += arguments[i];
  5. }
  6. console.log(counter);
  7. }
  8. sun(1, 2, 3, 4, 5, 7);

修改实参的值

function foo(a){
  a = 3;
  // arguments[0] = 3;
}
function foo(a, b){
  b = 3;
  arguments[1];// undefined
}
foo(1);

6-函数 - 图1

函数命名规则

  1. 不能数字开头
  2. 可以字母,_, $开头
  3. 用小驼峰命名法 getMyName
  4. my_test 写法适合于工具类函数

函数返回值

  1. 终止程序运行

    function foo(){
    if (arguments.length === 0){
     return;
    }
    console.log("ok");
    }
    
  2. 返回值

    function foo(){
    return 111;
    }
    foo(); // 111
    

function expression

var test = function test1(){
  // test1 can be invoked inside function
}
test.name;  // "test1"
test1;     // ReferenceError

anonymous function expression

也叫函数字面量,把函数赋给一个变量

var test = function(){
}

嵌套函数

var a = 1;
;(function(){
  var b = 2;
  a; // 1
  function foo(){
    var c = 3;
    b; // 2
  }
  foo();
  c;// Reference Error
})();
// 函数内部可以访问外部,外部无法访问函数内部变量

举例

function test1(){
  var a = 1;
  console.log(b);
}
function test2(){
  var b = 1;
  console.log(a);
}

test1();
test2();

函数式编程

一个固定的功能或者时程序段被封装的过程,实现一个固定的功能或者时程序,在这个封装体中需要一个入口和一个出口,入口就是参数,出口就是返回