1.函数的基本语法:
function functionName(arg0, arg1, ... argN) {
statements
}
(1)return:
如果函数不包含return 语句,只执行函数体内语句,并返回undefined
如下代码:
<html>
<head>
<title>正常方法</title>
<script type="text/javascript">
function print(msg)
{
document.write(msg,"<br/>");
}
</script>
</head>
<body>
<script type="text/javascript">
alert(print("没有return"));//输出undefined
</script>
</body>
</html>
(2)另一个重要概念是,与在 Java 中一样,函数在执行过 return 语句后立即停止代码。因此,return 语句后的代码都不会被执行。
2.javascript中函数的重载
<html>
<head>
<title>函数重载</title>
<script type="text/javascript">
function print(msg){//函数1
document.write(msg,"<br/>");
}
function print(){//函数2
alert("first parameter:" + arguments[0]);
}
</script>
</head>
<body>
<script type="text/javascript">
print("正常方法");
</script>
</body>
</html>
在以上的代码中,或许你会认为
print("正常方法");
因为java,c++中就是这样的,调用的是函数1,但事实上调用的是函数2,为什么呢,因为在javascript中函数名事实是上是对象的引用(这个以下我们会讲到),函数事实上是一个完整的对象,函数名则只是对这个对象的引用.
所以事实上print这个引用在声明函数2时,转而引用了函数2这个对象
所以这种形式并非是对函数进行重载
那么你或许会反对这个说法,你会说
print("正常方法");
有一个实际参数而函数2声明时并没有声明参数,怎么调用呢?
事实上是javascript会将所有的参数都封装到特殊对象arguments中去
所以虽然函数2的声明中没有指定形式参数,但是在函数定义中依照arguments[0],arguments[1],arguments[2]...的顺序来取得函数2调用中的各个实际参数
3.为什么说函数是一个完整的对象,而函数名是这个对象的引用
(对于函数的定义方式有哪些,可以参看
http://silentjesse.iteye.com/blog/970193)
记得下面这个函数吗?
function sayHi(sName, sMessage) {
alert("Hello " + sName + sMessage);
}
还可以这样定义它:
var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");
而Function是一个类,所以new Function(.....)事实上就是定义了一个对象
虽然由于字符串的关系,这种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。
所以说函数事实上是一个对象
为什么说函数名是对这个函数对象的引用,下面这个例子可以看得更清楚
var doAdd = new Function("iNum", "alert(iNum + 20)");
doAdd = new Function("iNum", "alert(iNum + 10)");
doAdd(10);
这个例子可以更明白的说明,函数名doAdd是一个引用了...
观察这段代码,很显然,doAdd 的值被改成了指向不同对象的指针。函数名只是指向函数对象的引用值,行为就像其他对象一样。
既然是引用,那么当然可以为这个对象再声明一个引用了
如下:
var doAdd = new Function("iNum", "alert(iNum + 10)");
var alsodoAdd = doAdd;
doAdd(10); //输出 "20"
alsodoAdd(10); //输出 "20"
既然如果名只是指向函数的引用,那么可以把函数作为参数传递给另一个函数吗?回答是肯定的!
如下:
function callAnotherFunc(fnFunction, vArgument) {
fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum + 10)");
callAnotherFunc(doAdd, 10); //输出 "20"
所有函数都应看作 Function 类的实例。
4.如前所述,函数名属于引用类型,所以它们也有属性和方法
ECMAScript 定义的属性 length 声明了函数
期望的参数个数。
如下:
function doAdd(iNum) {
alert(iNum + 10);
}
function sayHi() {
alert("Hi");
}
alert(doAdd.length); //输出 "1"
alert(sayHi.length); //输出 "0"
Function 对象也有与所有对象共享的 valueOf() 方法和 toString() 方法。这两个方法返回的都是函数的源代码,在调试时尤其有用.
以后我们将function定义出来的变量称之为function实体
注意不是函数,函数之是他的功能之一.
也将之称之为Function对象(因为所有的function实体都是通过Function new出来的),注意Function对象的F是大写的
也只有Function对象才能使用关键字new来生成一个对象(重中之重)
分享到:
相关推荐
JavaScript函数-高级教程.md
1.本文将深入探讨JavaScript函数的基本原理、特点,并通过多个示例展示函数的使用流程和步骤。读者将学习到如何定义函数、编写函数体、调用函数以及处理返回值。此外,文章还将对函数的参数、作用域以及闭包等高级...
Javascript+JQuery--第4章.ppt )
Javascript+JQuery--第2章.ppt
javascript函数式编程 javascript函数式编程 javascript函数式编程
Web客户端统一验证JavaScript函数库组件概述Web客户端统一验证JavaScript函数库组件概述Web客户端统一验证JavaScript函数库组件概述Web客户端统一验证JavaScript函数库组件概述
JavaScript应用实例-常用函数-小七.js
第7节 JavaScript函数及应用.rar第7节 JavaScript函数及应用.rar第7节 JavaScript函数及应用.rar第7节 JavaScript函数及应用.rar第7节 JavaScript函数及应用.rar第7节 JavaScript函数及应用.rar第7节 JavaScript函数...
JavaScript函数式编程----高清版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
网页交互编程-JavaScript1-5章总结.xmind
第4章 JavaScript中的函数
javascript经典特效---函数计算.rar javascript经典特效---函数计算.rar javascript经典特效---函数计算.rar
第0课 - 内容概述 - [精通JavaScript+jQuery] 第1课 - JavaScript背景知识-[精通JavaScript+jQuery] 第2课 - JavaScript基础 - [精通JavaScript+jQuery] 第3课 - CSS基础 - [精通JavaScript+jQuery] 第4课 - CSS...
---第一章 4.mysql+JDBC ---jdbc ---mysql 5.jQuery制作网页特效 ---1.javaScript基础 ---2.javaScript操作BOM ---3.javaScript操作DOM ---4.JavaScript对象及初识面向对象 ---5.初识jQuery(转换) ---6.jQuery选择器...
JavaScript函数式编程.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
JavaScript函数基础 思维导图; 可以用MindManager 、XMind 、百度脑图打开;在这个的基础上面添加自己的理解,整理成自己的个人知识体系
-------------- 函数检索 -------------- trim函数: trim() lTrim() rTrim() 校验字符串是否为空: checkIsNotEmpty(str) 校验字符串是否为整型: checkIsInteger(str) 校验整型最小值: checkIntegerMinValue(str,...
// 延时1s执行// 或写成如果需要执行的函数没有参数,可以采用上例的第一种写法,如果需要带参数的话,就需要采用上例的第二种写法,但是采用上例的第二种写法需要
前端项目-javascript-canvas-to-blob,javascript canvas to blob是一个将画布元素转换为blob对象的函数。