JavaScript 高级篇之函数 (四)


Posted in Javascript onApril 07, 2012

1、函数的创建

由于前面已经用了很多的函数,我就不在这里多分享了。

2、嵌套函数

function china() 
{ 
function people()//嵌套函数,只有china用它 
{ 
document.write("我的心愿是当杜甫,最近网上他的漫画,他活的好潇洒"); 
} 
people(); 
}

3、函数的直接量

Javascript允许函数用直接量来定义,说白了就是一个表达式,(匿名函数)。细节:匿名函数以后会用,要明白!

function china(people) //函数声明 
{ 
return peole; 
} 
var fun = function(people){return people;};//通过表达式声明。效果等同

4、函数的参数(这里大家要注意)

当你调用一个函数的参数少于声明的参数个数是,其它的参数就是一个undefined的值。

//打印函数 
function displayArray(arr) 
{ 
if(!arr)return; 
for(var num =0;num<arr.length;num++) 
{ 
document.write("Num is "+ arr[num]+ "\t"); 
} 
document.write(" "+"<br />"); 
} 
var array = [2,32,14,57,6]; 
function borrowArray(from,/*optional*/to) 
{ 
if(!to) to = []; //to = to||[] 效果是等同的 
for(var element in from) //使用枚举遍历数组 
to.push(from[element]);//将元素添加到数组 
return to;//返回 
} 
var returnnumber = borrowArray(array);//执行 
displayArray(returnnumber);//打印 
//输出:Num is 2 Num is 32 Num is 14 Num is 57 Num is 6

5、可变的参数(Arguments 对象)
第一次看到这里我也晕了,怎么参数还变的呢,多白了,这个argument对象就是函数参数的管理者,比如你有一个函数,定义了3个参数,那argument就有一个和你定义的参数,一样的数据集。
要注意:arguments标识符在函数体内才有效的。你也可以就把它当成是函数的属性吧!
function checkArgument(x,y,z) 
{ 
if(arguments.length != 3) throw new Error("参数不匹配"); //检查参数是否合法,挺好用吧! 
return x+y+z; 
}

下面的例子是一个比较数字大小的例子,参数是可以变的。
function compareMaxNumber() 
{ 
var temp = Number.NEGATIVE_INFINITY;//表示javascript最小的复数 
for(var arg=0;arg<arguments.length;arg++) 
{ 
if(arguments[arg]>temp) temp = arguments[arg]; 
} 
return temp; //返回参数中最大的数字 
} 
document.write(compareMaxNumber(2,34,5,23,766,1000)+"<br />");//这里的参数可以有很多,输出1000

6、将对象属性作为参数
function displayArray(arr) //打印函数 
{ 
if(!arr)return; 
for(var num =0;num<arr.length;num++) 
{ 
document.write("Num is "+ arr[num]+ "\t"); 
} 
document.write(" "+"<br />"); 
} 
// 
function copyArray(from,from_start,to,to_start,length)//复制数组 
{ 
for(var i = from_start; i <length;i++) 
{ 
to.push(from[i]);//填充 
} 
return to; 
} 
//getArray 接受对象 
function getArray(objarray) 
{ 
//再次封装,调用copyArray 
return copyArray(objarray.from,objarray.from_start ||0,objarray.to|| [],objarray.to_start ||0,objarray.length);//这里用了一点技巧。 
} 
var arr1 = [1,2,3,4,5]; 
displayArray(getArray({from:arr1,length:4}));

6、作为数据的函数
function add(x,y){return x + y;} 
function multply(x,y){return x*y;} 
function cut(x,y){return x -y ;} 
operator(operator1,operator2,operator3)//接收3个参数,可以把函数作为参数使用。 
{ 
return operator1(operator2,operator3);//执行的是add(); 
} 
document.write(operator(add,operator(multply,2,4),operator(cut,12,2)));//输出18了

7、作为方法的函数

这里说的方法不过就是把函数存储在对象的属性里面,然后通过属性来调用,函数可以赋给任何变量。

var obj = {}; 
function display() //(something) 带参数 
{ 
return "Love";//something; 
} 
obj.method = display;//使用对象的直接量赋值。 
obj.method();//调用。obj.method("Love");

其实javascript也引用了this关键字。大家要记住其实调用方法的对象就是this的值。Object.method(); 这里Object就是对象,自然也就this的值了。
var privatename = 
{name:"Frank", 
age:21, 
sex:'男', 
display:function() 
{document.write("my name is:"+this.name+"\t age :"+this.age)}}; 
privatename.display(); //输出 name is:Frank age :21

8、构造函数

构造函数是初始化一个对象的属性,并专门和new运算符一起使用的构造函数,new运算符创建一个对象,然后调用构造函数,把新创建的对象当this的值来传递,赋值。(要能理解)

function createProperty(name,version)//构造函数 
{ 
this.name = name; 
this.version = version; 
} 
var tools = new createProperty("Multply",1.0);初始化,工具的名称,版本

9、定义函数的属性

当你需要使用一个全局不变值时,使用Function对象的属性将会很方便(以后创建命名空间,类的属性,其实都是寄托在这个上面)

createNamespace.name = "360buy.define"; 
createNamespace.version = 1.2; 
function createNamespace() 
{ 
document.write("名称空间:"+createNamespace.name +"版本:" + createNamespace.version); 
} 
createNamespace();//输出:名称空间:360buy.define版本:1.2

10、方法apply()和call()

使用这两个方法可以像调用其它对象的方法一样调用函数,两个方法第一参数都是要调用的对象,后面的参数是要调用的函数参数。

function applyCallOperator(args,args2) 
{ 
document.write(args+"<br />"); 
} 
var objpeople = {}; 
applyCallOperator.apply(objpeople.Frank,[3,4]);//等同 applyCallOperator.call(objpeople.Frank,3,4) 前面就多[] 
objpeople.Frank();

小结:这篇就像大家分享到这来吧,下一篇我们一起实现javascript类。
Javascript 相关文章推荐
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
Dec 02 Javascript
jquery 问答知识整理
Feb 11 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
Nov 30 Javascript
Javascript 闭包详解及实例代码
Nov 30 Javascript
vue 使用Jade模板写html,stylus写css的方法
Feb 23 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
vue项目中使用百度地图的方法
Jun 08 Javascript
vue兄弟组件传递数据的实例
Sep 06 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 #Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 #Javascript
为原生js Array增加each方法
Apr 07 #Javascript
jquery 操作DOM案例代码分享
Apr 05 #Javascript
jquery 操作DOM的基本用法分享
Apr 05 #Javascript
文本框输入时 实现自动提示(像百度、google一样)
Apr 05 #Javascript
Ajax搜索结果页面下方的分页按钮的生成
Apr 05 #Javascript
You might like
PHP中对数据库操作的封装
2006/10/09 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
JS 字符串连接[性能比较]
2009/05/10 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Django之form组件自动校验数据实现
2020/01/14 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
公司应聘求职信
2014/06/21 职场文书
服务宗旨标语
2014/07/01 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
JavaScript异步操作中串行和并行
2021/11/20 Javascript