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 相关文章推荐
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
js操作label给label赋值及取label的值示例
Nov 07 Javascript
使用JS获取当前地理位置方法汇总
Dec 18 Javascript
全面解析多种Bootstrap图片轮播效果
May 27 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
Sep 13 Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 Javascript
使用Vue自定义指令实现Select组件
May 24 Javascript
webpack实现一个行内样式px转vw的loader示例
Sep 13 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 Javascript
关于vue 项目中浏览器跨域的配置问题
Nov 10 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
Nov 16 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代码优化及php相关问题总结
2006/10/09 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
JavaScript更改字符串的大小写
2015/05/07 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
python私有属性和方法实例分析
2015/01/15 Python
Python中装饰器的一个妙用
2015/02/08 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
python实现简单井字棋小游戏
2020/03/05 Python
一道写SQL的面试题和答案
2013/11/19 面试题
家长给孩子的表扬信
2014/01/17 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
政协会议宣传标语
2014/10/09 职场文书
详解Python常用的魔法方法
2021/06/03 Python
Python何绘制带有背景色块的折线图
2022/04/23 Python