javascript的函数比较丰富、和javascript的对象一样,需要一定的积累才可以深入理解,通过函数可以体现javascript的面向过程编程思想,通过对象类型可以更好的体现面向对
象的设计思想,本节主要大概讲述一下javascript的函数
1 函数的定义方式
javascript的函数定义分为三种:function语句形式、函数直接量形式、构造函数的形式
// function 语句定义函数 function+函数名+参数列表+函数体
function fun1(x,y){
return x+y;
}
//执行一个函数是 fun1(3,4) 其中3,4是两个实际参数
console.info(fun1(3,4))
//在javascript的函数比较灵活,只会根据函数名进行匹配,和实际参数个数无关,同样返回7
console.info(fun1(3,4,5,6))
//函数直接量 这种方式用的较多 定义一个变量,直接赋值一个函数
var func2=function(x,y,z){
return x+y+z
}
//执行一个函数
console.info(func2('a','b',4))
//第三种形式 构造函数的形式 如果有返回值,必须放在最后一个参数,而且最好加上分号,对于形式参数需要使用引号
//构造函数没有函数体,是顶级作用域,与前两种方式不同
var func3=new Function('x','y','return x+y')
//执行函数
console.info(func3(3,5))
2 arguments参数
主要两个作用,1、获取实际参数、2、可以递归调用自己
//对于通过function定义函数、函数直接量定义的函数,都有一个特定的隐藏对象arguiments
//需要注意的是通过顶级作用域的构造函数Function 定义的函数是没有arguments对象
//1 arguments作用一,接受函数的实际参数,可以获取实际参数的长度,具体的实际参数
//对于arguments的使用需要在函数体中
var fun4=function(){
Ext.Msg.alert('实际参数长度',arguments.length)
Ext.Msg.alert('第一个参数值',arguments[0])
return 1;
}
console.info(fun4(1,2,3,4))
})
//2 arguments作用二,用于函数的递归操作
// 求一个数的阶乘
function fun5(x){
if(x==1){
return 1;
}else{
// 一般可以这样写,但是不够严谨
return x*fun5(x-1)
//最标准的写法
return x*arguments.callee(x-1)
}
}
3 闭包
主要需要理解的概念执行环境、作用域链、js垃圾回收
主要的作用是避免使用全局变量
//函数碰到return直接返回、没有renturn 返回结果undefined
//在javascript语言里: 更不提倡使用全局变量 (1:不安全、2:做变量搜索查找的时候效率比较低)
//通过闭包可以保留具备变量的值
//避免使用全局变量 点击按钮 统计点击的次数
var inp=function(){
var i=0;
return {
getCount:function(){
alert(++i);
}
}
}()
4 区别
//函数定义的区别
// 通过function语句定义的,会在执行javascript代码前优先加载 function定义的函数
// 通过函数直接量、构造函数定义的则会从上到下依次执行
// 1 演示在代码中先执行函数,后定义函数
//执行函数代码
//这段代码不会报错,因为function定义的函数优先加载
console.info(fun6(4,5));
function fun6(x,y){
return x*y
}
// 使用函数直接量,则报错undefined
/* console.info(fun7(4,5));
var fun7=function (x,y){
return x*y
}*/
//使用构造函数,同样报错undefined
/* console.info(fun8(6,7));
var fun8=new Function('x','y','return x+y;')*/
//作用域区别
// 通过构造函数创建,具有顶级作用域,只能取window对象定义的变量,全局变量
var b=1
function test(){
var b=2
// 这种方式优选局部变量,然后才是全局变量
var f=function(){return b};
alert(f())
// 只能与全局变量
var s=new Function("return b;")
alert(s())
}
console.info(test())
5 apply call函数
call apply 主要作用是绑定作用域
this 关键字,在javascript中,总是指向调用者,谁调用函数,this就指向谁
apply第一个参数是对象,第二个参数是数组表示实际参数
call 第一个参数是对象,后面是实际参数
// call apply 主要作用是绑定作用域
// this 关键字,在javascript中,总是指向调用者,谁调用函数,this就指向谁
//这个变量是属于window的,全局变量
var color='red'
// 定义一个obj,对象,有一个color属性
var obj={'color':'blue'}
var fun12=function(x,y,z){
//指向调用者的color属性
alert(this.color)
return x+y+z
}
// window 调用,返回red
fun12();
//obj对象调用,返回blue
//call 第一个参数是对象,后面是实际参数
console.info(fun12.call(obj,1,2,3))
// apply第一个参数是对象,第二个参数是数组表示实际参数
console.info(fun12.apply(obj,[1,2,4]))