JavaScript——递归,嵌套和闭包

关于函数创建的三种方式以及递归,嵌套和闭包的概念经常容易搞混。

函数定义的三种方式:1.声明式函数(标准的关键字function+函数名+(参数列表)+{函数主体})

例如:function functionname(param1,param2,......,paramn)

    {function statment}

2.匿名式函数(将函数赋予的变量+构造函数Function+(参数))

例如:var variable=new Function("param1","param2",......,"paramn","function body");

3.函数字面量:只会被浏览器解析一次(匿名和非匿名两种)

A.匿名形式的(可以作为参数传递给另一个函数)

var func=function (param1,param2,......,paramn){function satament}

B.非匿名式的(适用函数内部,只有函数内部的代码才能通过其名称调用它,非常适合与递归)

var func=function functionname(param1,param2,......,paramn){function statment}


递归,嵌套和闭包的理解:

1.递归:一般是用来针对非匿名形式函数字面量和声明式函数。

调用自身的函数称为递归函数;

缺点:递归占用的内存和资源比较多,同时难以实现和维护。

优点:在处理DOM之类的树形结构数据时,非常适合用递归。

例如:function commonFunction()

    {

var myFunc=function specialFunction(param1,param2,......,paramn)

{

function body;//存在某个判断条件使递归最终跳出循环

return specialFunction(param1,param2,......,paramn);

}

var result=myFunc(param1,param2,......,paramn);

    }

2.嵌套:不适用于匿名式函数(动态式),因为匿名式函数每次使用时都需要重构。

在某一函数内部存在了另一个函数就会形成嵌套。对于嵌套函数来言,内部函数在外部函数作用域内执行,并拥有对外部函数的参数和变量的访问权。而外部函数没有访问内部函数的权限。

内部函数通过外部函数传递给应用程序时将直接调用它,它可以使用作为参数传递给外部函数的参数值。

例如:     <script>

function outerFunc(base)//外部函数

{

var outerStr="!!!!";

return function(ext){        //内部函数

return base+ext+outerStr;

}

}

function myApplication()//应用函数

{

var baseStr=outerFunc("Hello");//创建对内部函数的访问

var newStr=baseStr("World");

alert(newStr);

}

</script>

3.闭包:可以在嵌套的基础上理解闭包;当嵌套中的内部函数是以:A.内部对象形式创建的一个函数字面量B.并将其通过调用外部函数返回给主调应用程序中的一个变量,这就会形成一个JavaScript闭包。

   应用:用来获取内部函数中的变量值。因为外部函数a没有访问内部函数b中变量和参数的权限,所以为了能够使用内部函数b中的参数或变量,我们可以在内部函数b里面建立一个对象形式的函数字面量c,这样这个新建的函数字面量c就可以访问内部函数b中的变量和参数。通过将内部函数b赋值给外部函数a中的变量,就可以通过外部函数a中的这个变量模拟函数字面量c,实现对内部函数b的参数和变量的访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值