数学上的函数
y = f(x);
js上的函数
编程规范 高内聚(模块里的代码独立性强),低耦合(重复的代码提取出来): 模块的单一责任制
解耦合: 将重复的代码提取出来,比如做成一个函数。
函数基本写法
function declaration
function foo(num1/*formal args1*/){
}
// invoke function foo
foo();
// invoke function foo again
foo();
// 函数被调用时才会被执行
function foo1(){
var a = b = 1;// 错误声明变量,b会被挂载到window上
}
formal arguments
function foo(a, b/*形参*/){
console.log(a+b);
}
foo(1, 2); // 1,2 为实参
// js的参数是一一对应的
foo(1); // "1undefined"
arguments
function foo(){
console.log(foo.length); // 实际的参数长度
console.log(arguments); // 实参伪数组
}
foo(1, 2, 3, 4);
一个函数被调用时,累加他的实参值
function sum(){
var counter = 0;
for (var i = 0; i<arguments.length; i++){
counter += arguments[i];
}
console.log(counter);
}
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);
函数命名规则
- 不能数字开头
- 可以字母,_, $开头
- 用小驼峰命名法 getMyName
- my_test 写法适合于工具类函数
函数返回值
终止程序运行
function foo(){ if (arguments.length === 0){ return; } console.log("ok"); }
返回值
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();
函数式编程
一个固定的功能或者时程序段被封装的过程,实现一个固定的功能或者时程序,在这个封装体中需要一个入口和一个出口,入口就是参数,出口就是返回