今天开始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_functionsimple_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);
});

MooTools教程(4):函数和MooTools相关推荐

  1. MooTools教程(1):认识MooTools

    2019独角兽企业重金招聘Python工程师标准>>> 有人最近要求我们写一个关于MooTools 1.2的30天的教程,这似乎也是个很不错的主意,于是我们决定现在就开始.在这些教程 ...

  2. MooTools教程(5):事件处理

    今天我们开始第五讲,在上一讲(<Mootools 1.2教程(4)--函数>)中,我们学习了在MooTools 1.2中建立和使用函数的几种不同方式.下一步就是理解事件了.和选择器类似,事 ...

  3. MooTools教程(2):DOM选择器

    如果你还没有准备好,请先阅读上一篇<Mootools 1.2教程(1)--MooTools介绍>.我们讲了怎么引用MooTools 1.2以及怎么在domready里面调用你的脚本. 今天 ...

  4. Mootools教程

    mootools教程1 http://microsoft.iteye.com/blog/432521 mootools教程2 http://xiangyuan8603.iteye.com/blog/1 ...

  5. Swift2.0语言教程之函数嵌套调用形式

    Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还可以调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其他函数:另 ...

  6. Swift2.0语言教程之函数的返回值与函数类型

    Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...

  7. GLUT教程 - glutPostRedisplay函数

    http://www.cnblogs.com/live41/p/3395899.html [译]GLUT教程 - glutPostRedisplay函数 Lighthouse3d.com >&g ...

  8. TensorFlow2.0教程-keras 函数api

    TensorFlow2.0教程-keras 函数api Tensorflow 2.0 教程持续更新: https://blog.csdn.net/qq_31456593/article/details ...

  9. 计算机函数涵义,Excel函数教程: 引用函数的含义和表示方法-excel技巧-电脑技巧收藏家...

    Excel函数教程: 引用函数的含义和表示方法 Excel函数应用之逻辑函数 在介绍查询与引用函数之前,我们先来了解一下有关引用的知识. 1.引用的作用 在Excel中引用的作用在于标识工作表上的单元 ...

最新文章

  1. 机器学习与高维信息检索 - Note 7 - 核主成分分析(Kernel Principal Component Analysis,K-PCA)
  2. BPSK,QPSK,2FSK,16QAM,64QAM信号在高斯信道与瑞利信道下的误码率性能仿真
  3. PHP面试常考内容之面向对象(3)
  4. flink中的table api中的CloseableIterator是什么意思?
  5. Linux文件系统与日志
  6. [C++ rudiment][转]typedef 使用
  7. 去重+排序板子(set+map)
  8. 06-08 Jenkins 自动化测试持续集成
  9. 什么是AsHelper
  10. CComboBoxEx 扩展组合框
  11. JavaScript实现飞机大战小游戏
  12. SQLAPI++ Library 4.2.1 VS2010破解版
  13. 各种定律(心理学定律、思考定律)
  14. 【量亿数据-level2】唐奇安趋势跟踪系统
  15. 流程控制之顺数结构和选择结构
  16. 2019 Google Developder Days(GDD)
  17. CSharp学习笔记
  18. 网络安全——缓冲区溢出攻击
  19. 空间直角坐标系右手系和左手系的判定方法及绕轴旋转的正方向
  20. 易语言与服务器即时通讯,求易语言简单即时通讯

热门文章

  1. 信息学奥赛一本通 1120:同行列对角线的格 | OpenJudge NOI 1.8 02:同行列对角线的格子
  2. 信息学奥赛一本通(1127:图像旋转)
  3. Cow Contest(POJ-3660 )
  4. 1 CO配置-企业结构-定义-创建经营组织(Operating Concern)
  5. 浅谈OpenGL、OpenGL ES
  6. error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/r
  7. Python getattr() 函数==>获取一个对象的属性值
  8. 1.x和2.x的区别
  9. 几种常见的长度单位整理
  10. metronic-Website Template