一.函数定义
- 用来封装你的重复性代码
- 在 Python 中定义函数使用 def 很关键字
- 在 js 中使用 function 定义函数
// 语法
function [函数名](形参1,形参2,形参3...){
[函数体代码];
}
- 无参函数
// 定义无参函数
function func1(){
alert("Hello world");
}
// 调用
func1(); // "Hello world"
- 有参函数
// 定义有参函数
function func2(name,age){
alert(name+"年芳"+age);
}
// 调用
func2("小女子",28); // "小女子年芳28"
func2(1,2,3,4) // "1年芳2" (参数过多不要紧,只会取出相应的数据)
func2(1) // "1年芳undefined" (参数少了也不要紧,会以 undefined 填充)
二.函数参数
- 参数一般五个以下
- 函数内引用的参数大于传入的参数会以 "undefined" 替代
- 函数内引用的参数小于传入的参数, 那么只会取出相应的参数
function cook(isBad,a,b,c){ // isbad形式参数
if (isBad){
alert('做饭');
}else{
alert('点一个外卖');
}
}
var bad = false; //刀坏了
cook(bad); // 点一个外卖
-
arguments 参数
能够获取到函数接受到的所有的参数
function alls(a,b,c,d){
console.log(arguments);
}
alls(1,2,3) // [1,2,3]
三.函数返回值与函数表达式
- 可以声明变量来接收函数返回值
// 加法
function addition(a,b){
return a+b;
}
// 减法
function subtraction(a,b){
return a-b;
}
// 乘法
function multiplication(a,b){
return a*b;
}
// 除法
function division(a,b){
return a/b;
}
// 调用
var r = addition(4,6); // 10
var r1 = subtraction(4,6); // -2
var r2 = multiplication(4,6); // 24
var r3 = division(4,6); // 0.666666666666
- 函数表达式
var division = function(a,b){
return a/b;
}
// 调用
division(10,2) // 5
四.全局变量与局部变量
- 函数外部的属于全局,函数内部的属于局部,只能在函数里面调用, 函数运行完毕, 局部变量就会被删除
- 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它
var a = 1;
console.log(a); // 1
function add(){
var b = 2;
console.log(b); // 2
}
add();
//无法调用,b只是局部
console.log(b); // 报错
五.匿名函数
- 没有名字的函数
- 函数可以被赋值, 但对于一个匿名函数来说赋予名字没有意义
- 匿名函数一般与 map( ) 之类的函数组合使用
function(){
console.log("xxx");
}
六.作用域
- 首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。另外函数的作用域关系是在定义阶段就固定死的,与调用位置无关
七.变量提升
- 所有的声明都会提升到作用域的最顶上去
- 同一个变量只会声明一次, 其他的被忽略掉
- 函数的声明优先级高于变量声明的优先级, 并且函数声明和函数定义的部分一起被提升