1、创建函数
JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写法如下:
第一种:
function fn() {};
第二种:
var fn = function () {};
此外,可以说还有一种方法,称为“函数构造法”
var fn = "{name:'color red'}";
var obj = new Function("return"+fn)();
alert(obj.name);//color red
此方法以一个字符串作为参数形成函数体,但是用这种方法,执行效率方面会打折扣,似乎无法传递参数,所以少用为妙。
2、函数的调用
js的函数调用会免费奉送两个而外的参数就是 this 和 arguments。arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度。
- 方法调用模式
- 函数调用模式
- 构造器调用模式
- apply调用模式
var obj={
value:0,
inc:function () {
alert(this.value);//this指obj
}
}
obj.inc();
(2)函数调用模式
var add = function(a, b) {
alert(this) >//this被绑顶到window
return a + b;
}
var sum = add(3, 4);
alert(sum);
(3)构造器调用模式
var quo = function(string) {
this.status = string;
}
quo.prototype.get_status = function() {
return this.status;
}
var qq = new quo("aaa");
alert(qq.get_status());
(4)apply调用模式
函数的apply方法,如同该对象拥有此方法,使该对象拥有此方法。此时this指向该对象。
apply接收两个参数,第一个是要绑定的对象(this指向的对象),第二个是参数数组。
function MyObject(name) {
this.name = name || 'MyObject';
this.value = 0;
this.increment = function(num) {
this.value += typeof(num) === 'number' ? num : 0;
};
this.toString = function() {
return '[Object:' + this.name + ' {value:' + this.value + '}]';
}
this.target = this;
}
function getInfo() {
return this.toString();
}
var myObj = new MyObject();
alert(getInfo.apply(myObj)); //[Object:MyObject {value:0}],this指向myObj
alert(getInfo.apply(window)); //[object Window],this指向window
3、函数的参数
参数用于将数据传递到函数内部。当然,如果不用参数传递,在函数内部也可以访问外部的变量,那为什么还要参数呢?
1.封装:有了参数,函数内部就不用关心外部的东西,只负责自己处理自己的东西即可。
2.如果你使用参数,那么你在函数内部修改了参数的值,外部的值就不会受到影响,如果你直接操作函数外部的值,那可就危险了。(当然,不是所有参数的修改都不会被影响,如果是引用传递,那么外部的值会同时改变)。
function fn1() {
alert("hello");
}
function fn2(str) {
str=2;
return str;
}
alert(fn2());
第一个为无参函数,第二个为有参函数。并且有参函数里面有返回值return str,外部调用函数的时候才能拿到里面参数的值。