js变量对象的问题

function foo(a) {
  var b = 2;
  function c() {}
  var d = function() {};

  b = 3;

}

foo(1);
AO = {
    arguments: {
        0: 1,
        length: 1
    },
    a: 1,
    b: undefined,
    c: reference to function c(){},
    d: undefined
}

其中b,d为什么是undefined? 不太懂这个过程唉

阅读 2.4k
5 个回答

这是 foo函数执行初期的 执行上下文初始化阶段,主要工作是确定作用域内的变量声明提升
这里确定变量:arguments对象abcd
其中 b,c,d 都存在声明提升
b,d变量声明提升,初始值即为 undefined
c函数声明提升,初始值即为写的 function c(){}

你贴的信息
上面调用 返回值为undefined
下面这个不是一个对象吗
对象键值 它定义就是b和d是undefined 有什么过程吗

作用域:

大括号内的都是局部变量,外部不可见
没有var关键字声明的,作用域提升为全局变量,a、c就是这种情况

多问一句,reference是啥

你这上面和下面两段代码有什么联系吗?我怎么没明白...

就直接贴一个之前看过很不错的一片分享,刚好可以解答你这个问题:
https://segmentfault.com/a/11...
里面有对函数执行过程有非常详细的说明

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题