JavaScript引用类型--Function类型
2016-03-19 15:18
776 查看
JavaScript中,“函数是对象,函数名是指针”
函数通过两种方式定义:函数声明和函数表达式
两种定义方式却别在于:通过变量名访问函数的时机
JavaScript中没有函数重载
函数可以作为值来使用,不仅可以像传递参数一样把一个函数传递给另一个函数
也可以将一个函数作为另一个函数的结果返回
函数内部属性:
函数内部有两个特殊的对象: arguments 和 this
上面的程序定义没有问题,但是函数的执行与函数名factorial紧紧耦合,arguments.callee可以消除这种耦合现象
函数通过两种方式定义:函数声明和函数表达式
函数声明: function sum(num1, num2){ return num1 + num2; } 函数表达式: var sum = function(num1, num2){ return num1 + num2; }
两种定义方式却别在于:通过变量名访问函数的时机
例子: alert(sum(10,10)); function sum(num1, num2){ return num1 + num2 }; 以上代码是可以正常运行的,在代码执行之前,解析器已经读取并将声明添加到执行环境中 如果将函数声明改为函数表达式定义,则会出现错误: alert(sum(10,10)); var sum = function (num1, num2){ return num1 + num2 }; 错误原因在于函数位于一个初始化语句中,而不是一个函数声明
JavaScript中没有函数重载
函数可以作为值来使用,不仅可以像传递参数一样把一个函数传递给另一个函数
function callSomeFunction(someFunction, someArgument){ return someFunction(someArgument); } function add10(num){ return num + 10; } var result1 = callSomeFunction(add10, 10); alert (result1); //20 function getGreeting(name){ return "Hello" + name; } var result2 = callSomeFunction(getGreeting, "Nicholas"); alert (result2); // "Hello Nicholas"
也可以将一个函数作为另一个函数的结果返回
function createComparisonFunction(propertyName){ return function(object1, object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 < value2){ return -1; } else if (value1 > value2){ return 1; } else { return 0; } } }
函数内部属性:
函数内部有两个特殊的对象: arguments 和 this
arguments是一个类数组对象,包含传入函数中的所有参数。其callee属性是一个指针,用于指向拥有这个arguments对象的函数
function factorial(num){ if (num <= 1){ return -1; } else { return num * factorial(num -1); } }
上面的程序定义没有问题,但是函数的执行与函数名factorial紧紧耦合,arguments.callee可以消除这种耦合现象
function factorial(num){ if (num <= 1){ return -1; } else { //return num * factorial(num -1); return num * arguments.callee(num - 1); } }
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享