JavaScript 函数嵌套问题

qq446512500 2015-05-11 02:33:16
代码如下:

function foo () {
function bar () {
}

return bar;
}

var a = foo();
var b = foo();
alert(a === b); // 结果为 false


一开始,我以为函数都是预编译的,在代码执行之前就已经准备好的,
所以,推测 foo, bar 两个函数在一开始就存在,以上代码中的 foo, bar 始终都没变过。

经过运行测试,发现如果 foo 不执行, bar 函数是不存在的,
结论是:预编译的时候,只有全局函数 foo 被定义,而 foo 函数体内的函数 bar 还没有定义,
当 foo 函数被执行时, 先定义 bar 函数,再执行 foo 函数代码。
当 foo 第二次执行时, bar 还会被定义一遍,所以 foo 执行多少次, bar 就被定义多少次。

不知道我以上的结论对不对?

还有一点,我担心这样会不会影响效率,如果 bar 函数的内容不依赖 foo 的环境,把 bar 写成全局函数会不会快一些?
...全文
129 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq446512500 2015-05-29
  • 打赏
  • 举报
回复
目前我就把它当作一种局部变量来理解好了
aA0_bB1_cC2 2015-05-12
  • 打赏
  • 举报
回复
调用了就执行,不调用就不执行
KK3K2005 2015-05-12
  • 打赏
  • 举报
回复
function bar () { } function foo () { return bar; } 改成这样
jzshmyt 2015-05-12
  • 打赏
  • 举报
回复
我理解是这样的,
function foo(){
    function bar () {
    
    }
    return bar;
}
等价于
function foo(){
    return function(){
    	
    };
}
foo执行多次,bar function被定义多次 一般这种写法都是为使用foo代码块内的局部变量,形成闭包环境; 如果bar不需要使用foo的局部变量,就应该写成全局的方法
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2015-05-11 02:33
社区公告
暂无公告