全部博文(788)
分类: 敏捷开发
2017-07-17 21:14:36
一直对函数作为参数被传递进另外一个函数理解的不是很清除。先看下这段代码吧:
function test(fn){ var bar = 1; fn(); } var bar = 99; test(function foo(){ console.log(bar); }); console.log(foo);
先说下结果为99和foo is not defined。在《你不知道的JavaScript》一书中有这么一句话:无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。
所以我的问题是这样的:
上面代码中test函数的参数foo函数是函数表达式对吧?也算是函数声明吧?
代码中的foo函数到底存在于哪个作用域里面呢?我最开始以为console.log(bar)的结果是99,说明了这个foo函数存在于全局作用域内而不是test函数作用域内(如果在test函数的作用域内结果就该为1了吧),可是最后的console.log(foo)的结果又是foo is not defined。。
困惑了很久。。望解答~