JS中嵌套函数有什么用

JavaScript014

JS中嵌套函数有什么用,第1张

function myWrite(str){ document.write(str+"<br/>") }function myFun(){ function mySum(x,y) { var z=x+yreturn z } var b=mySum(1,6) myWrite(b) }myFun()1.函数嵌套定义只能出现在函数,不能出现在选择语句或循环语句中;2.嵌套定义的函数只能在嵌套的函数中使用;如上 mySum函数只能在myFun函数调用;不能再其他函数中调用,如myWrite函数;也不能再myFun函数的其他顶层全局代码中调用.

functionoutter(){//在outter中定义一个内嵌函数,innerfunctioninner(){alert('innerfunctioncall.')}returninner//返回内嵌的函数。//innerisoutofscope.}functionfollow(){varinner=outter()//在follow中调用outter,获取inner函数的引用。inner()//执行,我可以执行作用域外的函数了!}上面是举个简单的例子,来说明函数声明的作用域。上面的outter函数中,方法执行结束之后,inner函数的上下文已经销毁了。正常情况下,内部函数也会随着销毁。但是由于我们返回了inner函数的引用,并且在follow函数中成功赋值。因此inner函数虽然已经处于作用域外了,但是由于仍然有一个引用,所以它还是可以继续被执行。但是follow函数结束以后,follow的上下文也销毁了,并且这次,inner函数再也没有机会逃离被销毁的命运了。因此所谓函数嵌套的问题,就是作用域+引用的问题。只要搞明白了这个就可以了。

题主是说在 run 外部调用 a、b、c?

那是不可能的,使用嵌套函数的目的就是为了让外部无法调用,以达到封装性的目的。

可以使用折衷的办法:

function run(obj){

    function a(){

        return '我不爱你'

    }

    function b(){

        return '我爱你'

    }

    function c(){

        return '我只喜欢你'

    }

    

    switch(obj){

        case 'a':

            return a()

            break

        case 'b':

            return b()

            break

        case 'c':

            return c()

            break 

    }

    return null

}

使用时:

alert(run('a'))

alert(run('b'))

alert(run('c'))