一.函数的定义
1.声明函数
function funName(arg0,arg1,arg2){
// 函数体
}
函数声明可以提升,在执行代码之前会先读取函数声明,
所以函数声明可以放在调用函数语句之后
2.构造函数
function Person(first,last,age,eye){
this.firstName = first;
this.lastName = last
this.age = age;
this.eyeColor = eye;
}
函数 Person() 是对像构造器函数,通过new 关键词调用
var myFather = new Person("Bill","Gates",62,blue)
为对象添加属性和方法
myFather.nationality = "English";
myFather.name = function () {
return this.firstName + “” + this.lastName;
};
3.匿名函数
(1)赋值
赋值给事件
window.onload = function(){
// 函数体
}
赋值给变量
var func = function(){}
func() // 必须放在函数后面
** (2) 自执行**
1.使用!开头
!function(){}();
2.使用()
(function(){})();
3. 将匿名
(function()());
4.中括号内执行
[function(){}()];
5.使用+
+function(){}
6.使用-
-function(){};
7.使用~
~function(){}();
8.使用void
void funciton(){}();
4.嵌套函数
js 允许函数的相互嵌套,因此可以嵌套函数。
声明两个相互嵌套的函数体结构
function a(x,y){
function b(c,d){
return a * b;
}
returen x+y;
}
嵌套的函数只能在函数体内可见,函数外不允许直接访问
function a(x,y){
function b(c,d){
return a * b;
}
return e(3,6) + y;
}
console.log(f(3,6))
二.函数的属性
1.length 属性
函数的length 属性 表示形参个数。
2.name 属性
属性可以访问到给定函数指定函数名,匿名函数的name 属性为空
3.ptototype 属性 指向一个对象的引用 每一个函数都包含不同的原型对象
将函数用做构造函数时,新创建的对象会从原型对象上继承属性
三.函数的调用
1.一般形式的函数调用
(1)使用小括号
function fn(a,b){
return a *b;
}
console.log(fn(3,3))
** (2)函数返回值为一个函数**
function fn(c,d){
return function(){
return c * d;
}
}
console.log(fn(5,6)())
(3)递归调用函数
function fn() {
return fn;
}
console.log(fn()()()()())
3.使用call 和 apply 动态调用
call 和 apply 是function 的原型方法,能够将特定的函数当做一个方法绑定到指定对
象上, 并进行调用
function.call(thisobj,args...)
function.apply(thisobj,[args])
** (1)使用call 动态调用函数**
function f(a,b){
return a+b;
}
console.log(f.call(null,3,3))
(2)使用apply 动态调用函数
function f(a,b){
return a+b;
}
console.log(f.call(null,3,3))
(3)可以动态调用Math 的 max 方法来计算数组的最大元素
var a = [1,10,55,44,22,63,88];
var m = Math.max.apply(Object,a)
console.log(m)
call 和 apply 方法的主要功能如下
调用函数
修改函数体内的this 代指对象
为对象绑定方法
跨越限制调用不同类型的方法
4.new 命令间接调用
new 命令可以实例化对象,在创建对象的过程中会激活并运行函数
使用new 命令可以间接调用函数
function (a,b){
console.log("a=" + a+ ", b =" + b)
}
new fn(3,4)
使用new 命令调用函数时,返回的事对象,而不是return返回值