js: 函数的三大特性

函数是一种特殊的类,它的特性可以大概分为三类:

方法特性(): 运行大括号包裹的代码;

对象特性: 执行如f.bind()、f.call()之类的方法;

类的特性new: 可以做为构造函数。


方法特性就是执行大括号里的代码,这个比较简单,就不写了,如:

        function f() {
// 运行这里面的代码
    var x = 0;
    return ++x;
}

      


接下来我们看对象特性: 对象特性又可以分为自有属性自定义属性

自有属性主要有:

arguments、length、call方法、apply方法、bind方法、name、prototype、toString()等。

自定义i属性主要有:

内部和外部的变量及方法的区别。



自有属性简单描述:再其他文章中会详细记录,现在只是描述。

arguments是接收实参返回一个数组,下图中返回null,是因为它存在,但没有内容,比如x,它不存在,所有返回undefined;

length是形参的个数;

name是返回函数的名称;

toString()是返回函数的字符串形式;


v2-cf1f875948bd4ad0716014ea64cc0197_b.jpg


自定义属性: 内外部个有优缺点。

方法:

        function f(a, b) {
    f.x = 1;
}
f.y = 2;

      

f.x和f.y有什么区别?

f.x需要执行一下f()函数,才能访问到;而f.y可以直接访问。

v2-dcf57dab91116df5601523f64e196e9a_b.jpg

这种自定义属性有何用?比如你在函数中再写一个函数,很难执行,可以写成匿名函数,再赋值给自定义属性,这样就方便访问。如:

        function f(a, b) {
    console.log("访问到了f()函数")
    function e() {
        console.log('访问我...,要带礼品。')
    }
}

      

v2-d046d068ae564cf33fd70a814f02f11a_b.jpg
        function f(a, b) {
    console.log("访问到了f()函数")
    f.e = function() {
        console.log('访问我...,要带礼品。')
    }
}

      

v2-d536023a69f45ad26932e5dec7b99a55_b.jpg

变量:

变量定义在内部会重新初始化,定义在外部又会被其他函数修改。根据实际业务使用。

        var b = 0
    function f() {
    var a = 0;
    a++;
    b++;
    console.log(`a=${a} | b=${b}`)
}

for(var i = 0; i < 10; i++) {
    f();
}

      

v2-3afeb6bb9889020b503e914a695e0656_b.jpg

也可以使用自定义属性中的这种方法写闭包(在其他文章中会写到),如:

f.a放外面也行,只是放里面好看些。

        var b = 0
function f() {
    if(f.a == undefined) {
        console.log('f.a初始化')
        f.a = 0
    }
    f.a++;
    b++;
    console.log(`a=${f.a} | b=${b}`)
}
 
for(var i = 0; i < 10; i++) {
    f();
}
      

v2-87632f2c6c3e69515f12bcc8cc9ab8fc_b.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值