javascript函数
2015-10-18 17:49
483 查看
Function对象
js中一切都是对象,函数也是对象,函数名是引用函数定义对的变量。
一.函数的定义
二.匿名函数
定义时,不指定函数名的函数
三.arguments对象
arumengts: 在函数调用时, 会自动在该函数内部生成一个名为 arguments的隐藏对象。
标识符arguments是指向函数实参的引用,实参对象是一个类数组对象。每个实参对象都包含以数字为索引的一组元素以及length属性,但它毕竟不是真正的数组。
js语法不支持重载,但可用arguments对象模拟重载效果。
arguments[i] 获得传入的下标为i的的参数值
arguments.length 获得传入参数的个数
即使定义了参数变量,arguments对象同样会收到所有参数值
arguments 的 callee 和 caller 属性
在ECMAScript 5 严格模式中,这两个属性的读写都会产生一个类型错误。
callee: 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。
1. callee 属性在某些时候会非常有用,比如匿名函数中通过 callee 来递归地调用自身
2. caller: 在一个函数调用另一个函数时,被调用函数会自动生成一个caller属性,指向调用它的函数对象。如果该函数当前未被调用,或并非被其他函数调用,则caller为null。
四. 函数的属性
1.length 属性
在函数体内, arguments.length 表示传入函数的实参的个数。而函数本身的 length 属性(只读),代表函数的形参个数,即在函数调用时期望传入函数的实参个数。
2. prototype 属性 指向原型对象的引用
js中一切都是对象,函数也是对象,函数名是引用函数定义对的变量。
一.函数的定义
//函数定义的三种方法 //声明方式 function sum(x,y){ return x+y; } sum(1,2);//调用sum函数,求和 //函数名和函数定义都被提前,在调用前后位置定义都行 //函数直接量 var sum = function(x,y){ return x+y; } sum(1,2);//调用sum函数,求和 //仅函数名声明变量会提前,函数定义留在本地,必须定义在调用前 //使用new创建函数类型对象 var sum = new Function("x","y","return x+y");
二.匿名函数
定义时,不指定函数名的函数
/* 匿名函数自调: 定义完,立即执行,执行完立即释放 只有确定函数只执行一次时使用 */ (function(x,y){alert(x*y)})(2,3); var tens = (function(x) {return x*x}(10)); //自调:定义在哪,就在哪执行,不提前 /* 匿名函数回调 将函数作为队象传递给另一个函数,由另一个函数自主决定在需要时调用 */ var arr=[1,12,123,3,2,23]; arr.sort(function(a,b){return a-b;});//比较器函数回调 console.log(arr);
三.arguments对象
arumengts: 在函数调用时, 会自动在该函数内部生成一个名为 arguments的隐藏对象。
标识符arguments是指向函数实参的引用,实参对象是一个类数组对象。每个实参对象都包含以数字为索引的一组元素以及length属性,但它毕竟不是真正的数组。
js语法不支持重载,但可用arguments对象模拟重载效果。
arguments[i] 获得传入的下标为i的的参数值
arguments.length 获得传入参数的个数
function calc( ){ //如果用户传入一个参数,求平方 if(arguments.length==1){ alert(arguments[0]*arguments[0]); }else if(arguments.length==2){ //如果用户传入两个参数,就求和 alert(arguments[0]+arguments[1]); } } calc(4); //16 calc(4,5); //9 /*无论用户传入几个数字,都可以求和*/ function add(){ //遍历arguments中每个元素,并累加 for(var i=0,sum=0;i<arguments.length;sum+=arguments[i++]); return sum;//返回和 } alert(add(1,2,3)); //6 alert(add(1,2,3,4,5,6)); //21
即使定义了参数变量,arguments对象同样会收到所有参数值
arguments 的 callee 和 caller 属性
在ECMAScript 5 严格模式中,这两个属性的读写都会产生一个类型错误。
callee: 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。
(function aCallee() { console.log(arguments.callee); })();//FF 中返回 aCallee()
1. callee 属性在某些时候会非常有用,比如匿名函数中通过 callee 来递归地调用自身
var factorial = function(x){ if(x <= 1) return 1; return x * arguments.callee(x-1); } factorial(4);// 24
2. caller: 在一个函数调用另一个函数时,被调用函数会自动生成一个caller属性,指向调用它的函数对象。如果该函数当前未被调用,或并非被其他函数调用,则caller为null。
function testCaller() { console.log(testCaller.caller); } function aCaller() { testCaller(); } aCaller(); // FF 下输出为 aCaller()
四. 函数的属性
1.length 属性
在函数体内, arguments.length 表示传入函数的实参的个数。而函数本身的 length 属性(只读),代表函数的形参个数,即在函数调用时期望传入函数的实参个数。
(function check(args){ console.log("实参真是个数" + arguments.length + "; 期望实参个数:" + arguments.callee.length); })(2,3,4,5); // 实参真是个数4; 期望实参个数:1
2. prototype 属性 指向原型对象的引用
相关文章推荐
- JSON数据解析(转)
- js输出console
- HTML / JavaScript / PHP 实现页面跳转的几种方式
- 一点用JS写控制权限的心得
- [LeetCode][JavaScript]Remove Duplicates from Sorted Array
- [LeetCode][JavaScript]Remove Duplicates from Sorted Array II
- JS编程去掉注释部分
- JSP之应用Servlet过滤器进行身份验证
- JSON数据解析(GSON方式) (转)
- html+js实现四则元算计算器
- js错误处理
- Ember.js 入门指南——定义模型
- js拖拽实现
- javascript 实现一个网页,然后计算出有多少剩余时间的倒计时程序
- JS中如何输出空格
- JSP的内置对象
- 你不知道的JavaScript--Item11 arguments对象
- 你不知道的JavaScript--Item11 arguments对象
- js定时器 setTimeout
- 详解js闭包