关于javascript中返回函数的案例

    function foo(){

       var a=2;

       function bar(){

          //dosomething

       }

       return bar;

    }

    var baz=foo();

    baz();

在这段代码中,返回了bar函数本身;如果把return bar更改为alert(bar),就会输出:

    function bar(){

       //dosomething

    }

那么是不是可以认为,var baz=foo()等价于:

    var baz=function bar(){

       //dosomething

    }

有两个疑问:

  1. 代码中的return bar,能够返回函数本身么?

  2. 最后这个等价函数,在形式上不是函数声明,好像也不是函数表达式(函数表达式中的function应该是匿名的)这里该如何理解这种形式呢?还烦请大伙解惑!!

补充:a、既然能写成var baz=function bar(){//dosomething},根据这个函数目前所书写的位置,那么现在bar()函数的下一个外包环境,就是全局环境。如果说法成立,那就会和bar在函数foo内部相互矛盾,也就是bar函数脱离了foo函数,出现在了全局环境中;那闭包岂不是不能形成??
(闭包的概念:内部函数能够访问外部函数的变或函数。)
b、如果说写成var baz=function bar(){//dosomething}后,bar()函数还是存在于foo函数词法作用域的内部,但是根据词法作用域的查找规则,对bar的查找是不会进入foo函数的内部,那就应该无法调用baz();会出现报错;而这里还能调用????


慕田峪9158850
浏览 467回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript