Function 类型
函数实际上是对象,函数名实际上也是一个指向函数对象的指针
函数声明语法:
funtion sum(sum1,sum2){
return num1+num2
}
函数表达式
var sum = function(sum1,sum2){
return num1+num2
};
使用Function构造函数
var sum = new Function("num1","num2","return num1 + num2");
不推荐使用这种方法定义函数,因为这种方法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能
没有重载(深入理解)
function addSome(num){
return num + 100;
}
function addSome(num){
return num + 200;
}
addSome(100) ==> 300
注意:var sum = function sum(){} -- 会在Safari中报错
没有重载即:声明同样函数名的情况下,后者会覆盖前者
函数声明与函数表达式:
浏览器解析器会率先读取函数声明,并使其在任何代码之前可访问,至于函数表达式,则必须等到解析器执行到它所在的代码行,才会被执行。
作为值的函数:
function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument)
}
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:函数据以执行的环境对象
函数属性和方法
每个函数都包括两个属性:
length:函数希望接收的命名参数个数
prototype:
function sayName(num1,num2){
return num1 + num2
}
alert( sayName.length ) ==> 2
每个函数都包含两个非继承而来的方法:apply()和call(),两个方法都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值
函数内部属性