java的函数类型_javaString的函数类型剖析

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]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值