引用类型——Function类型

function居然是一种引用类型。这就以为着,每个函数都是Function类型的实例,而且都与其他引用类型一样,他妈的有属性,有方法。函数就是一个对象,那么函数名也就是一个指针了,和其他引用类型一模一样,也是有字面量和构造函数两种创建方法,然后再一个函数中,把函数作为参数传递进去也就很正常了

1、创建方法

var fun1=new Function("num1","num2","return num1+num2");
var fun=function(num1,num2){return num1+num2;};//就尼玛和其他引用类型的对象创建一模一样

2、没有重载

就像我前面说的那样,每个函数就是对象,所以函数名就是一个指针。接下来就清楚了函数名相同的,就是指针被重新赋值,所以ECMAScript中是没有重载的。

function add(num){
return num+100;};
function add(num){
return num+200;};
var result=add(200)//400;

你现在还看不出来的话就改变吧,把函数改成熟悉的对象表达形式

var add=function(num){
return num+100;};
  add=function(num){
return num+200;};
var result=add(200)//400;

3、函数声明和函数表达式

alert(sum(10,10));
function sum(num1,num2)
{
return num1+num2};//正常输出,20.
alert(add(10,10));
var add=function(num1,num2){
return num1+num2};//产生错误

这里说的一点就是,解析器在执行环境加载数据的时候,对函数声明和函数表达式时不会一视同仁的。解析器会率先读取函数声明,并使其在执行任何代码之前可以使用;至于函数表达式,则必须要等到解析器执行到它所在的代码行,才会真正被解释执行。

除了什么时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的

4、作为值的函数

函数就是对象,所以函数就可以当做值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回

函数作为参数进行传递

function call(f,some){
return f(some);};
function add10(num){
return num+10;};
var result1=call(add10,10);//20;
function getName(name){
return "hello,"+name};
var result2=call(getName,"Yao");//"hello,Yao"

函数作为另一函数的结果返回,这里我们专门用sort()作为例子讲解

var num=[2,3,4,5,6,8];
num.sort(function(a,b){return b-a});//逆序

sort函数我们以前都是这样写的,sort()中可以用一个函数对象作为参数来确定排序的指标。我们是可以自定义比较函数的比较标准的。

var str1="zhang";
		var str2="huan";
		alert(str1>str2);
		function createFunction(propertyName){
			return function(a,b){
				var value1=a[propertyName];
				var value2=b[propertyName];
				if(value1>value2)
				{
					return 1;
				}
				else if(value1<value2)
				{
					return -1;
				}
				else{
					return 0;
				}
			}
		}
		var data=[{name:"zhang",age:23},{name:"huan",age:24}];
		data.sort(createFunction("name"));
		alert(data[0].name);//huan

5. 函数内部属性

  没怎么接触过,我现在只能先记一下,不能深入理解。

arguments.callee,在哪个函数中用,这个东西就是代表哪个函数。

arguments.callee.caller

caller中保存着调用当前函数的函数的引用。arguments.callee.caller就代表了调用了当前函数的外层函数。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值