扫码关注官方订阅号
var a=3; var object = { a:2, run: function() { alert(a); //a=3; } }; object.run();
a为什么不是2?在对象中的a:2是什么意思?
业精于勤,荒于嬉;行成于思,毁于随。
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; } };
你不显示指定,还是全局作用域下的变量。
作用域的问题了,你直接弹出一个a,这个时候程序就会找a,首先会在当前作用域里面找,没有,就会去外面找,然后就找到了var a,这个a其实就相当于 window.a,其实你这里直接弹出一个a,就相当于是找了个 window.a全局作用域下的a ,而为什么找的不是object.a 这个a呢,前面说了,你找的相当于是 window.a 而不是 obejct.a两者的作用域环境不一。js作为一个面向对象的编程语言,所有的东西又要有个存在的归属,那个东西属于哪个,这个要搞明白,如果你不弄的话,就相当于默认了它是全局下面的,一般js所有的东东都是定义在window下面的。所以你要不先定义好是哪个a,那a就相当于直接是window的了。当然函数下面定义的就相当于是属于函数作用域范围里里面的。具体的不多说了。多看资料。
为什么一个说console.log(object["a"])可以访问a的都没有在方括号内填一个字符串可以访问对象下的相应属性
console.log(object["a"])
顺便 这道题的作用域链大概是这张图.
很明显可以看出对象是一个闲置对象,而函数运行时找到的是全局的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,这是两个概念。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
a:2表示object这个对象里"a"属性的值等于2。js里以函数为作用域划分,object里面的a并不是一个单独的变量,要访问它只能通过object.a。下面是类似的一个例子:
你不显示指定,还是全局作用域下的变量。
作用域的问题了,你直接弹出一个a,这个时候程序就会找a,首先会在当前作用域里面找,没有,就会去外面找,然后就找到了var a,这个a其实就相当于 window.a,其实你这里直接弹出一个a,就相当于是找了个 window.a全局作用域下的a ,而为什么找的不是object.a 这个a呢,前面说了,你找的相当于是 window.a 而不是 obejct.a两者的作用域环境不一。js作为一个面向对象的编程语言,所有的东西又要有个存在的归属,那个东西属于哪个,这个要搞明白,如果你不弄的话,就相当于默认了它是全局下面的,一般js所有的东东都是定义在window下面的。所以你要不先定义好是哪个a,那a就相当于直接是window的了。当然函数下面定义的就相当于是属于函数作用域范围里里面的。具体的不多说了。多看资料。
为什么一个说
console.log(object["a"])可以访问a的都没有在方括号内填一个字符串可以访问对象下的相应属性
顺便 这道题的作用域链大概是这张图.
很明显可以看出
对象是一个闲置对象,而函数运行时找到的是全局的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,这是两个概念。