JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索
在JavaScript中,函数function就是对象。
JS中没有方法重载
在JavaScript中,没有方法(函数)重载的概念。
例子:
<html>
<head>
<script type="text/javascript"> function add(number)
{
alert(number + 20);
} function add(number, number1)
{
alert(number + 30);
} add(10);
</script>
</head> <body> </body> </html>
网页中弹框显示的是40。
说明虽然第二个方法是两个参数,但是仍然调用了它。
交换两个方法的顺序之后,弹框显示30,可以看出不管参数个数如何,是调用同名的后面的方法。
怎么解释这个现象?
这是因为函数声明实际上是建立了一个对象:
<html>
<head>
<script type="text/javascript"> function add(number)
{
alert(number + 20);
}
/*
上面的函数等价于:
var add = function(number)
{
alert(number + 20);
}
*/
function add(number, number1)
{
alert(number + 30);
}
/*
上面的函数等价于:
var add = function(number, number1)
{
alert(number + 30);
}
*/
add(10); </script>
</head>
<body>
</body>
</html>
这样add实际指向的是后面的对象,而方法调用的时候赋予的参数将会按顺序赋给方法形式参数,后面没有被赋值的参数就是undefined。
JavaScript的函数调用的时候没有严格的参数个数检查,实参个数小于形参个数是可以的,没有被赋值的形参就是未定义值undefined。
实参个数大于形参个数也是可以的,这样只有前面的实参会被使用,多出来的实参不会被使用。
Function对象
在JavaScript中有一个Function对象,所有自定义的函数都是Function对象类型的。
Function对象接收的所有参数都是字符串类型的,其中最后一个参数就是要执行的函数体,而前面的参数则是函数真正需要接收的参数。
例子:
<html>
<head>
<script type="text/javascript"> var add = new Function("number", "number1", "alert(number + number1);"); var add = new Function("number", "alert(number + 20);"); add(10, 30); </script>
</head>
<body>
</body>
</html>
隐含对象arguments
在JavaScript中,每个函数都有一个隐含的对象arguments,表示给函数实际传递的参数。
arguments和函数的形式参数及其个数无关。
arguments有个有用的属性length,表示实参的长度。可以借助这个来模拟出函数的重载:
练习例子:
<html>
<head>
<script type="text/javascript"> function add(number1, number2)
{
alert(arguments.length);
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
//add(2, 3, 4); function add2()
{
if(1 == arguments.length)
{
alert(arguments[0]);
}
else if(2 == arguments.length)
{
alert(arguments[0] + arguments[1]);
}
else if(3 == arguments.length)
{
alert(arguments[0] + arguments[1] + arguments[2]);
}
} add2(3);
add2(3, 4);
add2(3, 4, 5); </script>
</head> <body>
</body>
</html>
每一个函数对象都有一个length属性,表示该函数期望接收的参数格式。
它与函数的arguments不同,arguments.length表示函数实际接收的参数个数。
例子:
<html>
<head>
<script type="text/javascript">
var add = function(num, num2, num3)
{
alert(num + num2 + num3);
}
alert(add.length); //输出3
add(1, 2, 3);
var add2 = function()
{
}
alert(add2.length); //输出0
</script>
</head>
<body>
</body>
</html>
参考资料
圣思园张龙老师Java Web视频教程。
W3School JavaScript教程:http://www.w3school.com.cn/js/index.asp
英文版:http://www.w3schools.com/js/default.asp
JavaScript学习09 函数本质及Function对象深入探索的更多相关文章
- javascript 学习总结(五)Function对象
1.Function 函数调用(类似call方法) function callSomeFunction(someFunction, someArgument){ return someFunctio ...
- JavaScript学习总结(四)function函数部分
转自:http://segmentfault.com/a/1190000000660786 概念 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. js 支持两种函数:一类是语言内部的函数 ...
- Javascript学习5 - 函数
原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...
- Javascript学习之函数(function)
在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...
- JavaScript学习笔记(十四)——对象
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- JavaScript学习笔记——函数
javascript函数的声明和调用 将完成某一特定功能的代码集合起来,可以重复使用的代码块. 一.函数的声明方式(创建) A.基本语法 function 关键字 function 函数名([参数1] ...
- JavaScript基础知识(JSON、Function对象、原型、引用类型)
19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式 特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...
- JavaScript学习笔记-函数
函数的两种创建方式:函数定义表达式.函数声明语句 编译时,函数声明语句创建的函数会‘被提前’至外部函数的作用域顶部,在该作用域内可以被随意调用: 而函数表达式创建的函数,要调用它必须赋值给一个变量,编 ...
- javascript学习(三) 内置对象
一:事件(Event)对象 在触发dom事件的时候都会产生一个event对象 type 获取事件类型 target 获取事件目标 stopPropagation() 阻止事件冒泡 preven ...
随机推荐
- wordpress和普通网页如何使用百度分享组件
百度分享组件是什么?摘自百度百科: 百度分享是一个提供网页地址收藏.分享及发送的WEB2.0按钮工具,网站的浏览者可以方便的分享到人人网.分享到开心网.分享到QQ空间.分享到新浪微博等一系列SNS站点 ...
- eclipse中关联文件设置方法
在前几次的试验中,只是做了处于应用程序最上层的界面设计,其实还不知程序在运行过程中到底调用了哪些函数,这些函数是怎么实现的,由于搭建环境时没有进行文件关联,所以在环境中无法实现ctrl键+左击鼠标的方 ...
- 浅谈Dictionary用法
一.基础篇 1.Dictionary泛型类提供了从一组键到一组值的映射,即键和值的集合类. 2.Dictionary通过键来检索值的速度是非常快的,这是因为 Dictionary 类是作为一个哈希表来 ...
- jquery_layout
http://layout.jquery-dev.com/documentation.cfm
- Net重温之路一
简述: 最简单的 Hello World 准备: 工具:VS2013 + SqlServer 2008 R2 我们将以.NET Framework 4.5 为基准 开始: 一:新建解决方案 > ...
- cros解决跨域
- 【Java每日一题】20161021
20161020问题解析请点击今日问题下方的"[Java每日一题]20161021"查看 package Oct2016; public class Ques1021 { publ ...
- 【Java每日一题】20161020
20161019问题解析请点击今日问题下方的"[Java每日一题]20161020"查看 package Oct2016; public class Ques1020 { publ ...
- 【转】PHP 5.3 5.4 5.5 5.6特性
前两天,PHP5.6已经发布了.恐怕我们很多人都停留在5.2时代吧. PHP5.3 (2009-2012) PHP5.3 算是一个非常大的更新,新增了大量新特征,同时也做了一些不向下兼容的修改. 弃用 ...
- java 四舍五入保留小数
// 方式一: double f = 3.1516; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.RO ...