引用类型(Function)
-
Function 函数
function sum(num1, num2) {
return num1 + num2;
}
没有重载
function addSomeNumber(num) {
return num + 100;
}
function addSomeNumber(num) {
return num + 200;
}
var result = addSomeNumber(100); // 300
后面的函数会覆盖前面的函数~~~~
作为值的函数
js 中函数名本身就是变量,所以函数可以当作值来使用:
function callSomeFunction(someFunction, someArgument) {
return semeFunction(someArgument);
}
function add10(num){
return num + 10;
}
var result = callSomeFunction(add10, 10); // 20
访问函数指针但不执行函数方法时去掉后面的括号。
函数内部属性
函数内部有两个特殊的对象:arguments 和 this
arguments: 它是一个类数组对象,包含着传入函数中的所有参数。这个对象还有一个 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * factorial(num - 1);
}
}
等同于:
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
this:类似于java 中的 this,引用的是函数据以执行的环境变量
window.color = "red";
var o = { color : "blue"};
function sayColor() {
alert(this.color);
}
sayColor(); // red
o.sayColor = sayColor;
o.sayColor(); // blue
函数属性和方法
函数就是对象,所以也是有属性和方法的,每个函数都包含 length 和 prototype
length:函数希望接收的命名参数的个数
protorype:后面单独介绍
每个函数都包含两个非继承而来的方法:apply() 和 call() 这两个方法的用途都是在特定的作用域里调用函数,apply()接受两个参数,一个是运行的使用域,别一个是参数数组,call() 传递给函数的参数必须逐个列举出来:
function sum(num1, num2) {
return num1 + num2;
}
function applySum(num1, num2) {
return sum.apply(this, arguments);
}
function applySum2(num1, num2) {
return sum.apply(this, [num1, num2]);
}
function callSum(num1, num2) {
return sum.call(this, num1, num2);
}
ECMAScript 还定义了一个方法:bind(),这个方法会创建一个函数的实例,其中this值会被绑定到传给bind()函数的值。
window.color = "red";
var o = { color : "blue"};
function sayColor() {
alert(this.color);
}
sayColor(); // red
var objectSayColor = sayColor.bind(o);
objectSayColor(); // blue
哈哈这里解决了上篇 RN 文章留下 的问题 _