JavaScript的引用类型-Function
一、Function
1.函数的声明和函数表达式、
在JavaScript中、Function也是一种类型、所有定义的函数都是Function类型的、
alert(sum(10, 1));
function sum(val1, val2) {
return val1 + val2;
}
上边的方法不会报错、因为JavaScript的执行环境会把函数的声明提前、而下边的函数表达式会报错、因为在执行alert的时候、sum还没有获得函数的引用、
也就是JavaScript的执行环境只会把函数的声明提前、而不会将赋值提前
alert(sum(10, 1));
var sum = function(val1, val2) {
return val1 + val2;
};
还有一种的函数的创建方式、在这里并不建议使用这种方式、由于这种方式需要一次解析和一次运行因此也会降低JavaScript的性能、
var function = new Function(‘val1‘, ‘val2‘, ‘return val1 + val2‘); //最后一个参数为方法体、前边的都是该方法的参数、
2.函数可以作为值进行传递、
函数名存储的是对函数的引用、
function sum (val1, val2) {
return val1 + val2;
}
function callFunction(func, num1, num2) {
return func(num1, num2);
}
3.函数的内部属性
函数内部有两个特殊的对象arguments、和this
arguments是函数的参数组成的数组、
function sum(num1, num2) {
return arguments[0] + arguments[1]; //此处的arguments[0]和arguments[1]分别代表num1和num2、
}
arguments还有一个属性callee、这个属性是一个指针、指向了arguments所在的函数、即sum函数、
function factory (num) {
if(num < 0) {
return 0;
} else {
return num + arguments.callee(num - 1); //此处我们使用callee、当我们想把factory函数名换掉时就不用担心函数的内部的问题了、
}
}
this是函数内部另一个特殊的对象、this对象引用的是函数所依赖的执行环境的对象、
var window.color = ‘red‘;
var o = {color : ‘blue‘};
function sayColor() {
alert(this.color);
}
sayColor(); //‘red‘
o.sayColor = sayColor;
o.sayColor(); //‘blue‘;
4.函数的属性和方法、length、prototype
function sum(num1, num2) {
return num1 + num2;
}
alert(sum.length); //length 代表函数sum的参数的个数、
函数的prototype属性保存了所有sum实例的方法、例:var s = new sum();则对象s的属性和方法都是指向了sum的prototype属性中的方法、
【注】ECMAScript 5还定义了一个新的额方法、这个方法创建一个函数的实例、其this值会被绑定到传给bind函数的值、
var o = {color:‘blue‘};
function sayColor() {
alert(this.color);
}
sayColor = sayColor.bind(o);
sayColor(); //‘blue‘
bind函数并不会改变原有sayColor对this的应用、而是返回的函数将this指向了o、