Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1206849
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类: 敏捷开发

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。。

困惑了很久。。望解答~




这个答案描述的挺清楚的:
阅读(904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~