JS中对象的作用域?或者是对象的属性的一些疑问?

var a=3;
var object = { 
    a:2, 
    run: function() {
         alert(a);         //a=3;
         } 
    }; 
object.run(); 

a为什么不是2?
在对象中的a:2是什么意思?

阅读 7.7k
6 个回答
var a=3;
var object = { 
    a:2, 
    run: function() {
         alert(this.a);//2
         alert(a);//3 
        } 
    }; 
object.run(); 

a:2表示object这个对象里"a"属性的值等于2。js里以函数为作用域划分,object里面的a并不是一个单独的变量,要访问它只能通过object.a。下面是类似的一个例子:

var a=3;
function fun(){
    var a=2;
    function run(){
        alert(a);//2
    }
    run();
}
fun();
run: function() {
     this.a=1;
     } 
}; 

你不显示指定,还是全局作用域下的变量。

为什么一个说console.log(object["a"])可以访问a的都没有clipboard.png
在方括号内填一个字符串可以访问对象下的相应属性

顺便 这道题的作用域链大概是这张图.

clipboard.png
很明显可以看出
对象是一个闲置对象,而函数运行时找到的是全局的a.

你alert(a) 这里a是一个变量.

而object.a是一个对象属性,你必须要用object.a才能引用他.

参考jsvascript精粹,这个牵扯到this指向的问题,谁调用run方法,this就指向调用它的对象,object对象的this指向的是window,所以这里的a是window作用域下的a所以是2。

其实你对象你的a是这个对象a属性的值是2,但是你run方法里所弹出的a是访问的变量a,这是两个概念。

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