关于js函数内部取外部值的问题

 var o = {
            fn : function(){
                var a=1;
                //第一种情况:如果把bbb写在这儿外部调用这个bbb可以取到变量a的值
                // this.bbb = function(){
                //     console.log(a);
                // }
            },
             //第二种情况:如果把bbb写在这儿外部调用用这个bbb不可以取到变量a的值
            bbb: function(){
                console.log(a);
            }
        }
 function func(){
    o.bbb();//第一种情况可以打印出a的值,第二种不可以。第一种为什么可以呢,bbb是在func函数作用域里面调用啊??
 }
 o.fn();
 func();//

外部调用
为什么呢?

阅读 3.8k
3 个回答

函数内部是一个独立作用域

第一问,可以。外层函数有变量a.
第二问,不可以。对象没有变量a.

当函数内部找不到变量的时候,它会往外层找。也就是上层。

先看第一种情况:

var o = {
    fn : function () {
        var a = 1;
        bbb:function () {
            console.log(a);// 1 
        }
    }
} 

此处涉及到js函数作用域;变量a是局部变量,只在函数fn内部起作用,所以可以打印出1;
再看第二种情况:
函数内部定义的变量a,在函数fn外是无法获取到的,所以此时是打印出来:
Uncaught ReferenceError: a is not defined

关于函数作用域,闭包,变量提升等希望楼主看一下 js高程

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