javascript之内嵌函数篇
你了解javascript的内嵌函数吗?我们不防先做个小测试,你认为下面的代码运行结果会是什么呢?



<

script >


function  outerFn(firNum)



js函数中嵌套java js内嵌函数_ViewUI


{

    var firNum=firNum;

    firNum+=firNum;

    function innerFn(secNum)

    

js函数中嵌套java js内嵌函数_ViewUI

{

        firNum+=secNum;

        return firNum;

    }

    return innerFn;

}




function  test()



js函数中嵌套java js内嵌函数_ViewUI


{

var inNum = prompt('请输入一个数字',0);

while(isNaN(inNum))

js函数中嵌套java js内嵌函数_ViewUI

{

    inNum = prompt('请输入一个数字',0);

}

var outerRet = outerFn(parseInt(inNum));//call outer function

var lastRet = outerRet(parseInt(inNum));//call inner function

var userRet = prompt('请输入你认为正确的结果数字',0);

if(userRet==lastRet)

js函数中嵌套java js内嵌函数_ViewUI

{alert('恭喜你答对,你已经了解内嵌函数。');}

else

js函数中嵌套java js内嵌函数_ViewUI

{

    alert('很遗憾,你答错,正确答案是:'+lastRet+',建议你了解内嵌函数。')

}

}



< / script> 测试一下 继续看 你对javascript内嵌函数还不是很了解,请参考下面解释

javascript提供很多内置函数给大家调用,像alert(),call(),sort()等等,也可以自定义函数,如下面代码

function myFirstFn()

{

 return "this is my first Function";

}

上面代码定义了一个很简单的函数,调用myFirstFn返回一个字符串"this is my first Function",对于简单函数一看就会,很容易理解。复杂一点的内嵌函数该如何定义和使用呢?我们从上面测试的例子来说吧,outerFn是外层函数,innerFn是内嵌函数,上面例子中调用外层函数时返回的是内嵌函数,其实就是下面这样


function  outerFn(firNum)

// outer function


js函数中嵌套java js内嵌函数_ViewUI

{

 var firNum=firNum;

 firNum+=firNum;

 return function innerFn(secNum)//inner function

 

js函数中嵌套java js内嵌函数_ViewUI

{

  firNum+=secNum;

  return firNum;

 }

}

当调用outerFn(aNum)时,将返回innerFn,这个变量指向内嵌函数,并且保存函数的上下文(closure),因此innerFn可以访问外部函数的变量,最终的结果其实是aNum+aNum+aNum.一般函数在调用完之后就不能在访问函数的定义的局部变量,但javascript由于闭包的存在,使得内嵌函数引用可以使用外部函数的局部变量。

var outerRet = outerFn(parseInt(inNum)); alert(outerRet );

点击上面按钮可以看到outerRet指向内部函数,而且外部函数的局部变量firNum是可以访问的。

内嵌函数使函数可以作为一般的数据使用,可以作为参数传给其他函数,内嵌函数可以使用外部函数定义的变量,在外部函数以外是不可见的。可以利用这一点,在函数作为对象使用的时候用来定义私有方法。

以上是小弟对内嵌函数的一些理解,欢迎大家拍砖板。