javascript中的函数

来源:互联网 发布:应变数据采集仪 编辑:程序博客网 时间:2024/06/07 13:54

一·函数的定义

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=3var b=sub(2,1);//b=1
当函数中没有return语句return语句没有值,则返回undefined
函数调用通常不使用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);//3var 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;}

以上纯属自己的一些理解,希望能够给部分人一些帮助。
由于本人造化尚浅,望大神们勿喷。
原创粉丝点击