1,说起来js中什么最有意思,我想应该就是函数了——而有意思的根源,则在于函数实际上是对象。
2,每个函数都是Function类型的实例。声明或定义一个函数,你可以这样写:
function sum1(num1,num2){
return num1+num2;
};
或者这样写:
var sum2 = function(sum1,sum2){
return num1+num2;
};
还有一种2B的写法:
var sun3 = new Function("num1","num2","return num1+num2");
虽然不推荐这么写,但是这个写法可以帮助你更好的理解上面那句话:“每个函数都是Function类型的实例”。
3,一个函数可能有多个名字,因为函数名只是一个指针。
function sum4(num1,num2){
return num1+num2;
};
console.log("sum4(10,10)="+sum4(10,10));
var sum4_1 = sum4;
console.info("sum4_1(10,10)="+sum4_1(10,10));
sum4 = null;
//下面这句会报错,因为sum4已经不是一个函数类型了。
//console.log("sum4(10,10)="+sum4(10,10));
console.log("sum4_1(10,10)="+sum4_1(10,10));
4,js中过的Function类型对象没有重载,因为函数名只是一个指针。
function f1(num){
return num+100;
};
function f1(num){
return num+200;
};
console.info("f1(100)="+f1(100));
5,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码前可用。值域函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
6,函数名本身就是个变量,所以函数也可以作为值来使用。
function callSomeFunction(someFunction,someArgument){
return someFunction(someArgument);
};
function add10(num){
return num+10;
};
var result1 = callSomeFunction(add10,10)
console.log(result1);
function getGreeting(name){
return "Hello"+name;
};
var result2 = callSomeFunction(getGreeting,"tom");
console.log(result2);
7,当然,你也可以在一个函数中嵌套另一个函数。
function createComparisonFunction(propertyName){
debugger
return function(object1,object2){
var value1 = object1[propertyName];
console.info(value1);
var value2 = object2[propertyName];
console.info(value2);
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
};
};
var data = [{name:"tom",age:22},{name:"lucy",age:25}];
data.sort(createComparisonFunction("name"));
console.info(data);
8,函数的内部属性。在函数内部,有两个特殊的对象:argunents和this。arguments是一个类数组对象,里面保存着传入函数的所有参数。
9,还有一些其他的属性,比如length,它表示函数希望接受的命名参数的个数。注意,是希望。这意思是说在某种程度上说js函数传入参数时你可以多给点或者少给点儿都没事。
10,“在ECMAScript核心所定义的全部属性中,最内人寻味的就要数prototype属性了。”(看了蛮久资料 看得还不是很懂,这里先放下,留个坑以后慢慢填。)
本节源码下载地址:JavaScript学习笔记(11):Function类型
网友评论