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 }有两个疑问:代码中的return bar,能够返回函数本身么?最后这个等价函数,在形式上不是函数声明,好像也不是函数表达式(函数表达式中的function应该是匿名的)这里该如何理解这种形式呢?还烦请大伙解惑!!补充:a、既然能写成var baz=function bar(){//dosomething},根据这个函数目前所书写的位置,那么现在bar()函数的下一个外包环境,就是全局环境。如果说法成立,那就会和bar在函数foo内部相互矛盾,也就是bar函数脱离了foo函数,出现在了全局环境中;那闭包岂不是不能形成??(闭包的概念:内部函数能够访问外部函数的变或函数。)b、如果说写成var baz=function bar(){//dosomething}后,bar()函数还是存在于foo函数词法作用域的内部,但是根据词法作用域的查找规则,对bar的查找是不会进入foo函数的内部,那就应该无法调用baz();会出现报错;而这里还能调用????
添加回答
举报
0/150
提交
取消