javascript中的函数(Function)

来源:互联网 发布:java编程那些事儿 编辑:程序博客网 时间:2024/03/29 08:06

函数本质

javascript中的函数本质都是Function引用类型的实例,即函数就是一个Function类型的对象

函数定义

1.声明方式:
如:
function func(num){return num+1;}

2.函数表达式方式
var func=function(){         return 'hello';}

3.new方式
var func=new Function("num1","num2","return num1+num2") //最后一个参数就是函数体,前面都是函数参数

函数没有重载

js中函数没有重载,因为函数名就是一个保存函数对象引用的变量
如:
function addSomeNumber(num){      return num + 100;}function addSomeNumber(num) {      return num + 200;}实质:var addSomeNumber = function (num){      return num + 100;};addSomeNumber = function (num) {      return num + 200;};

函数对象的属性

1.this
指向函数执行时的外部作用域对象
2.arguments
指向保存参数的一个类数组对象,arguments对象有一个属性callee,这个属性执行函数对象,有趣的是构成了一个循环,函数对象的arguments指向参数对象,参数对象的callee属性执行函数对象。
举例:
function factorial(num){ if (num <=1) {return 1;} else {return num * factorial(num-1); //这个求阶乘的函数和函数名严重耦合,如果将函数引用赋值给其他变量将来使用此函数将报错}}

var trueFactorial = factorial;factorial = function(){return 0;};alert(trueFactorial(5)); //递归结果不对,factorial执行的函数变成了一个返回0的函数alert(factorial(5)); //结果0
function factorial(num){if (num <=1) {return 1;} else {return num * arguments.callee(num-1); //这样是松耦合的,和函数名就没有关系}}

3.caller

执行函数执行时的外部函数作用域对象,这个属性强调的是函数外部执行环境必须是一个函数,如果不是那么这个属性值为null
如:

function outer(){inner();}function inner(){alert(arguments.callee.caller); //弹窗显示的是outer函数,即caller属性指向outer函数对象}outer();

4.length

length属性表示函数形参个数

5.prototype

prototype属性执行函数对象的原型,任何引用类型都有原型,都是通过构造函数中的prototype属性引用的

函数对象中的方法

apply和call方法
这两个方法效果一样,只是传递参数的方式不一样,第一个参数函数执行的外部作用域对象,后面参数就是函数参数
如:

function sum(num1, num2){return num1 + num2;}function callSum1(num1, num2){return sum.apply(this, arguments); // 传入 arguments 对象}function callSum2(num1, num2){return sum.apply(this, [num1, num2]); // 传入数组}alert(callSum1(10,10)); //20alert(callSum2(10,10)); //20
//call方法function sum(num1, num2){return num1 + num2;}function callSum(num1, num2){return sum.call(this, num1, num2);}alert(callSum(10,10)); //20
//作用域的不同执行效果不一样window.color = "red";var o = { color: "blue" };function sayColor(){alert(this.color);}sayColor(); //redsayColor.call(this); //redsayColor.call(window); //redsayColor.call(o); //blue









0 0
原创粉丝点击