一·函数的定义
function关键字, 函数名称标识符,一对圆括号,一对花括号。
function add(x,y){
return x+y;
}
var sub=function(x,y){
return x-y;
}
var ten=(function(x){
return x*x;
}(10));//函数表达式定义后立即执行
alert(ten);//100
二·函数的调用
1.函数调用
var a=add(2,1);//a=3
var b=sub(2,1);//b=1
当函数中
没有return语句 或
return语句没有值,则
返回undefined。
函数调用 通常不使用this。
函数调用 通常不使用this。
2.方法调用
方法调用由两部分组成:一个
对象和
函数。对象成为调用上下文,函数体中可以使用
this引用该对象。
var cal={//对象直接量
x:1,
y:2,
add:function(){
return [this.x+this.y,this===cal];//this代指当前对象
}
};
cal.add();//[3,true]
this为关键字,不是变量,不是属性名。嵌套函数
不可以使用外层函数中的
this,但
可以使用外层函数中的
变量。
var obj={
a:1,
met:function(){
var self=this;
f();
function f(){
console.log(self.a);//1
console.log(this.a);//undefined
}
}
};
obj.met();
扩展:方法链:当方法的返回值为一个对象,这个对象还可以再调用它的方法。
3.构造函数调用
特点:使用new关键字。
function F(name){
this.name=name;
this.sayHello=function(){
console.log("Hello world!");
}
}
var a = new F();
a.sayHello();
4.间接调用
call()和apply()可以用来
间接地
调用函数。都允许显示制定调用所需的this。
任何函数可以用作
任何对象的
方法来调用,即使该函数不是该对象的方法。
三·实参对象
在函数体内,标识符
arguments指向
实参对象的引用,实参对象是一个类数组对象,可以通过数组下标就能访问实参值。
function max(){
var max=arguments[0];
for(var i=1;i<arguments.length;i++)
arguments[i]>max?max=arguments[i]:max;
return max;
}
console.log(max(1,2,40,99));//99
四·将函数用作值
function add(x,y){
return x+y;
}
function sub(x,y){
return x-y;
}
//某个函数为参数,并传入两个操作数
function operate(f,a,b){
return f(a,b);
}
var i=operate(add,operate(add,1,2),operate(sub,2,1));//4
五·闭包
个人理解:即
返回嵌套函数。
每次调用javascript函数时,都会为之创建一个
新对象
保存
局部变量,将该对象添加至
作用域链。当函数执行完,从作用域链中将该
对象回收。
var a="global a";
function checka(){
var a="local a";
function f(){
return a;
}
f();
}
console.log(checka());//undefined
将函数作为返回值。此时有一个
外部引用指向嵌套函数,它不会被当做垃圾回收,它所指向的变量绑定对象也不会。
var a="global a";
function checka(){
var a="local a";
function f(){
return a;
}
return f();
}
console.log(checka());//local a
六·函数方法和构造函数
call()方法,apply()方法,bind()方法。
call()方法和apply()方法:将一个
对象中的方法放至
另一个对象中执行。
var obja={
add:function(x,y){return x+y;}
};
var objb={};
var c=obja.add.call(objb,1,2);//3
var d=obja.add.apply(objb,[2,3]);//5。参数放入数组中传递
bind()方法:将
函数绑定至
某个对象上。
function f(y){return this.x+y;}
var obj={x:1};
var g=f.bind(obj);
g(2);//3。this.x绑定到1,y绑定到2
构造函数:
下面等价
var add=Function("x","y","return x+y;");
var add=function(x,y){return x+y;}
以上纯属自己的一些理解,希望能够给部分人一些帮助。
由于本人造化尚浅,望大神们勿喷。