Mootools 1.2教程 函数


Posted in Javascript onSeptember 15, 2009

今天开始MooTools系列教程的第4讲。如果你还没有看过上一讲,请先查看上一篇教程《Mootools 1.2教程(3)——数组使用简介》。今天我们先不讲MooTools,而是讲一讲JavaScript中的函数(function)的基本知识。
但是,为了符合MooTools这个主题,你需要知道在哪里该使用MooTools的函数。此前,我们已经在我们的所有示例代码中,把代码都放在domready方法中。当我们需要把它放在domready的外面时,我们使用了函数(function)。在你在domready里面调用函数之前,函数并不会被执行。
一般来说,一种比较好的方式是尽可能地把你的函数代码都放在页面之外的某一个地方,然后通过JavaScript应用来调用它们。当你只是写代码玩玩,可能把所有的东西写在一个页面上更容易一些。在这个教程中,我们使用下面的约定:

<script type="text/javascript"> 
/* 
* 函数定义写在这里 
*/ 
window.addEvent('domready', function() { 
/* 
* 函数调用写在这里 
*/ 
}); 
</script>

所有的例子都遵循这个格式,当页面载入的时候(load)执行函数代码。在每个函数的下面,都有一个相应的按钮,你可以点击它们,然后看到结果。这是通过使用MooTools的事件处理来完成的,明天我们将会讲到这个。
函数基础
在JavaScript中,有几种方式来定义函数,由于我们的主题是讲解MooTools,因此我们将选择MooTools的首选方式。下面的示例是一个函数定义的开始。我们什么了一个变量,并命名为simple_function,并吧这个变量定义为一个函数:
参考代码:
var simple_function = function(){
然后我们给这个函数增加了一个alert语句,当函数被调用的时候就会执行:
参考代码:
alert('This is a simple function');
最后,我们以一个花括号结束这个函数的定义:
参考代码:
}
这个关闭花括号看起来是一件非常简单的事情,但是很多时候要追踪这个问题却是一件很痛苦的事情。因此,适度地强迫对函数定义的关闭符号进行检查是个不错的主意。
在下面的例子中,我们把它们组合起来了。在声明这个函数之后,我们在页面加载后的domready事件里面添加了对这个函数的调用。可以点击例子下面的按钮查看调用函数simple_function();后的结果。
参考代码:
// 定义simple_function为一个函数 
var simple_function = function(){ 
alert('This is a simple function'); 
} 
window.addEvent('domready', function() { 
// 当页面加载后调用simple_function 
simple_function(); 
});

单个参数
虽然你有很多代码可以轻松地随时调用,这已经很有用了,但是如果你可以给它传递参数(信息)进行处理,这将会更有用。要在函数中使用参数,你需要在function后面的括号中添加一个变量,就像这样:
参考代码:
var name_of_function = function(name_of_the_parameter){ 
/* 函数代码写在这里 */ 
}

一旦你这样做了,在这个函数内部就可以使用这个变量了。尽管你可以给参数取任何你想要的名字,但是让参数名更有意义是个不错的选择。举个例子来说,如果你要传递一个小镇的名字,可能你把参数命名为town_name比其他更模糊的名字要好一些(比如user_input)。
在下面的例子中,我们定义了一个只带有一个参数的函数,并在弹出对话框中显示这个变量。请注意,信息的第一部分被单引号包含起来了,而参数没有。当你要把参数和硬编码的字符串连接在一起,你需要用加号(+)运算符把他们连接起来,就像下面一样:
参考代码:
var single_parameter_function = function(parameter){ 
alert('the parameter is : ' + parameter); 
} 
window.addEvent('domready', function(){ 
single_parameter_function('this is a parameter'); 
});

多个参数
JavaScript没有限制在一个函数中可以定义的参数的个数。一般来说,要让传给函数的参数个数尽可能地少,这会使代码更具可读性。函数中定义的多个参数使用逗号分割,其它行为这和单个参数函数一样。下面的示例中的函数带有两个数字,并把它们的和赋值给第三个数字,就像这样:
参考代码:
var third_number = first_number + second_number;
这里加号(+)运算符的使用和把这些结果连接成字符串略有一些不同:
参考代码:
alert(first_number + " plus " + second_number + " equals " + third_number);
虽然这个初一看起来可能有些混乱,但是实际上却非常简单。如果你在两个数字之间使用加号(+),你就是把它们加在一起。如果你在任意组合的数字和字符串之间使用加号(+),那么就是把所有的东西作为字符串连接起来。
参考代码:
var two_parameter_function = function(first_number, second_number){ 
// 取得first_number和second_number相加的和 
var third_number = first_number + second_number; 
// 显示结果 
alert(first_number + " plus " + second_number + " equals " + third_number); 
} 
window.addEvent('domready', function(){ 
two_parameter_function(10, 5); 
});

返回值
在一个弹出对话框中显示一个函数的执行结果可能很有用,但是有些时候你可能需要在其他地方用到这个结果。要完成这个任务,你需要使用函数中的return功能。下面的示例代码中,函数和上面的示例一样,不过这里不是弹出一个对话框,而是返回两个数字相加后的结果:
参考代码:
return third_number;
你会发现,我们也在domready中做了更多的事情。为了显示这个结果,我们把这个函数的返回值赋值给了一个名称为return_value的参数,然后把它显示在弹出对话框中。
参考代码:
var two_parameter_returning_function = function(first_number, second_number){ 
var third_number = first_number + second_number; 
return third_number; 
} 
window.addEvent('domready', function(){ 
var return_value = two_parameter_returning_function(10, 5); 
alert("return value is : " + return_value); 
});

把函数作为参数
如果你看看MooTools的domready里面我们包装的东西,你会注意到我们把一个函数作为参数传递进去了:
参考代码:
window.addEvent('domready', function(){
/* 函数代码 */
});
一个像这样把函数作为一个参数传递进去的函数称为匿名函数:
参考代码:
function(){
/* 函数代码 */
}
在第一篇教程的评论中,Boomstix指出了在domready中不使用匿名函数的一种替代方式。这种方式就是这样的:
参考代码:
// 建立一个要在domready时调用的函数
var domready_function(){
/* 函数代码 */
}
// 把函数指定到domready事件
window.addEvent('domready', domready_function);
我不知道这两种方式在性能和功能性上的任何明显差别,因此我认为这基本上只是一个风格习惯而已。我们会继续坚持我们的方式,如果有任何人知道这些差别请告诉我们。
代码示例
为了刺激你明天的食欲(和弥补今天对MooTools的缺少),我写了一个没有什么意义的函数,可以让你随意改变这个页面的背景:
参考代码:
var changeColor = function(){ 
// 用来从输入框中获得颜色值 
// (请参考: 
// http://docs.mootools.net/Element/Element#Element:get) 
var red = $('red').get('value'); 
var green = $('green').get('value'); 
var blue = $('blue').get('value'); 
// 确保每一个东西都是整数 
// (请参考: 
// http://docs.mootools.net/Native/Number#Number:toInt) 
red = red.toInt(); 
green = green.toInt(); 
blue = blue.toInt(); 
// 确保每一个数字都在1到255之间 
// 如果有需要则取整 
// (请参考: 
// http://docs.mootools.net/Native/Number#Number:limit) 
red = red.limit(1, 255); 
green = green.limit(1, 255); 
blue = blue.limit(1, 255); 
// 取得十六进制代码 
// (请参考: 
// http://docs.mootools.net/Native/Array/#Array:rgbToHex) 
var color = [red, green, blue].rgbToHex(); 
// 设置为该页面的背景色 
// (请参考: 
// http://docs.mootools.net/Element/Element.Style#Element:setStyle) 
$('body_wrap').setStyle('background', color); 
} 
var resetColor = function(){ 
// 重新设置页面的背景色为白色 
// (请参考: 
// http://docs.mootools.net/Element/Element.Style#Element:setStyle) 
$('body_wrap').setStyle('background', '#fff'); 
} 
window.addEvent('domready', function(){ 
// 为按钮添加点击事件(明天我们会讲这个) 
// (请参考: 
// http://docs.mootools.net/Element/Element.Event#Element:addEvent) 
$('change').addEvent('click', changeColor); 
$('reset').addEvent('click', resetColor); 
});

延伸学习...

下载包含你学习所需要的所有东西的zip包

包含MooTools 1.2核心库、一个外部JavaScript文件、一个简单的html页面和一个css文件。

更多关于JavaScript函数的内容

JavaScript函数上的Quirksmode(怪异模式)

我没有很好的关于JavaScript函数的资源,如果有人知道的话请告诉我。

有关示例的文档

  • Utilities/DomReady
  • Number.toInt()
  • Number.limit()
  • Array.rgbToHex()
  • Element.setStyle()
  • Element.addEvent()
Javascript 相关文章推荐
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
Dec 02 Javascript
JQuery中属性过滤选择器用法实例分析
May 18 Javascript
js自定义select下拉框美化特效
May 12 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
Jun 20 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
详解Javascript中DOM的范围
Feb 13 Javascript
原生js实现放大镜特效
Mar 08 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
AngularJS select设置默认值的实现方法
Aug 25 Javascript
Vue中render方法的使用详解
Jan 26 Javascript
在axios中使用params传参的时候传入数组的方法
Sep 25 Javascript
基于vue实现微博三方登录流程解析
Nov 04 Javascript
Mootools 1.2教程(3) 数组使用简介
Sep 14 #Javascript
Mootools 1.2教程(2) DOM选择器
Sep 14 #Javascript
MooTools 1.2介绍
Sep 14 #Javascript
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 #Javascript
JavaScript 函数调用规则
Sep 14 #Javascript
prototype与jquery下Ajax实现的差别
Sep 13 #Javascript
JS 参数传递的实际应用代码分析
Sep 13 #Javascript
You might like
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
phpfpm的作用和用法
2019/10/10 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
jquery登录的异步验证操作示例
2019/05/09 jQuery
js实现带搜索功能的下拉框
2020/01/11 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
如何基于Python实现自动扫雷
2020/01/06 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
大学毕业后的十年规划
2014/01/07 职场文书
体育口号大全
2014/06/18 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
初中政治教师教学反思
2016/02/23 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL