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();会出现报错;而这里还能调用????
相关分类