JS函数

函数是JS中另一种符合类型,可以包含一段可执行的代码。也可以接收调用者传入参数。

作为弱类型语言,函数参数列表不需要声明数据类型,函数的返回值也不需要声明数据类型。

JS中定义一个函数时,同时产生了5个内容。

1:函数。

2:对象。Function类型的对象。也属于Object。

3:方法。每一个函数都依附于一个对象,成为其方法。默认为window对象。

4:变量。函数同名的变量。

5:类。函数同名的类。也是其构造器。

函数同时作为一个类,可以采用如下方式进行调用:

直接调用:返回函数体内return语句的返回值。

new关键字调用:把函数当作类使用,返回一个对象。

函数属性:

函数体内,var声明的变量为局部变量。只能在函数体内访问。使用this前缀修饰的变量,为实例属性。只能使用对象调用。函数名修饰的变量为类属性,使用类名调用。所以当一个属性需要被外部使用时,不要定义为局部变量。

其实定义一个全局变量时,这个变量会依附与window对象,成为其实例属性。

函数调用:

直接调用:如alert('xxx')。

call()方法:

var each = function (array,fn){
    for(var index in array){
        fn.call(null,index,array[index]);
    }
}
each([4,5,6],function(index,ele){
    document.write("第"+index+"个元素是:"+ele+"<br/>");
});

可以看出,call()方法的使用:函数.call(调用者,参数1,参数2....)= 调用者.函数(参数1,参数2...)

apply()方法:

同call类似。函数.apply(调用者,[参数1,参数2...])

函数的独立性:

函数虽然从属于一个对象,但是都是可以单独使用的。

function person(name){
    this.name = name;
    this.info = function(){
        alert("我是"+name);
    }
}
var p = new person('王');
p.info();
var name = '李';
p.info.call(window);

从上可见,person的内部函数,可以被window以及其他的对象所调用。

函数提升:

JS中对于变量和函数,允许先使用后定义。但是,匿名函数只会提升函数对应的变量名,并不会提升函数体。可以简单认为匿名函数不具备函数提升。

箭头函数:相当于lambda表达式,是函数的简化写法。

(param1,param2...) => {statement} 相当于 function(param1,param2...){statement}

JS闭包:

一般情况下,一个函数执行完毕,内部的变量就被销毁了。但是:

function out(){
    var a = 'abc';
    this.inner = function(){
        return a;
    }
}
var x= new out();
var b = x.inner();
alert(b);

此时,out()外部函数及时执行完毕,只要还有inner()函数的引用,那么a变量依然存在。这相当于扩大了a变量的作用域,就是所谓的闭包。

参数处理:

JS同java一样,采用值传递方式传参。基本数据类型不会改变其值。符合数据类型,传参时传递过去一个副本,两者指向同一个内容。通过副本修改内容的话,会改变原变量引用的值。但是,修改副本自身,和原变量毫不相关。

参数:

JS允许使用空参数,相当于undifined类型的参数。

JS不强制参数个数,不强制参数类型。所以也没有所谓的重载。直接是后定义个同名函数覆盖前者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值