js 闭包函数、函数的定义、内置对象以及递归

自运行

        一个函数定义时,可以自动运行的函数,针对于匿名函数

原理

        let f=function(){   }
        f()等价于function(){   }()
语法

  •       (function(){    }())
  •         (function(){    })()
  •         !   function(){    }()
  •         void  function(){   }()

闭包 

        概念:函数嵌套函数,被嵌套的函数称为闭包函数

        作用:在函数外部操作函数内部的局部变量

        实现:在子函数中操作局部变量,将子函数作为父函数的返回值,通过一个全局变量绑定父函数的返回值,从而延长了子函数以及局部变量的生命周期,实现了可以在函数外部操作函数内部的局部变量

代码:

function fun() {
        var count = 0;

        var fun1 = function() {
            return ++count;
        }
        return fun1;
    }
    let f = fun();
    console.log(f())

闭包的缺陷

        内存使用完毕后未被垃圾回收机制回收,容易造成内存泄漏


函数对象

        函数定义三种方式

  •         function fun(){}
  •         let fun=function(){}
  •         let fun=new Function(“【函数的参数用逗号隔开】”,“函数体”)

        函数的内置对象

        this:

  •         和事件体连用,代表触发该事件的元素
  •         和普通方法连用,代表调用该方法的对象
  •         和构造方法连用,代表new出来的对象
  •         和箭头函数连用,代表调用该方法对象的前缀

        arguments:

        是一个伪数组,保存着函数的实参

function fun() {
		console.log(arguments)
		for (let i = 0; i < arguments.length; i++) {
			console.log(arguments[i])
		}
	}
	fun(1,"haha",25)

        作用:可以写不定参函数(判断参数数据类型,执行不同的操作)

    function fun() {
        for (let i = 0; i < arguments.length; i++) {
            if (typeof arguments[i] == "number") {
                console.log("数字操作");
            } else if (typeof arguments[i] == "string") {
                console.log("字符串操作");
            }
        }
    }

    fun("heihei", "hello", 1);

递归

        概念:一个函数直接或间接地调用自己本身

let count = 0;
function fun() {
console.log(++count);
fun();
}

 fun();

注意:这段代码并不是死循环,栈空间会有内存限制

        arguments.callee代表该函数对象

function age(n) {
        let c;

        if (n == 1) {
            c = 10;
        } else {
            c = arguments.callee(n - 1) + 2;
        }
        return c;
    }

    console.log(age(5));





 arguments.callee:代表该函数对象
    function fun() {
        console.log(arguments.callee);
    }

    fun();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值