Node.js 对象概念 作用域、this

数字、字符串:

var v1 = 1;
var v2 = v1;
console.log(v1);
console.log(v2);
console.log(v1 === v2);
v1 = 'Changed';
console.log(v1);
console.log(v2);
console.log(v1 === v2);

 

输出:

1
1
true
Changed
1
false

 

结论:数字、字符串赋值是将值复制一份,===是比较值是否相等。

对象:

var c1 = {};
var c2 = c1;
console.log(c1);
console.log(c2);
console.log(c1 === c2);
c1.name = 'ABC';
console.log(c1);
console.log(c2);
console.log(c1 === c2);

 

输出:

{}
{}
true
{ name: 'ABC' }
{ name: 'ABC' }

 

结论:

  对象赋值间只是传递引用(相当于指针);

var c1 = {};
var c2 = {};
console.log(c1);
console.log(c2);
console.log(c1 === c2);
c1.name = 'ABC';
console.log(c1);
console.log(c2);
console.log(c1 === c2);

 

输出:

{}
{}
false
{ name: 'ABC' }
{}
false

 

对象的===比较的是引用地址。 

http://www.w3school.com.cn/js/js_objects.asp

参考以上文章,了解JS中的对象更进一步。

 

http://howtonode.org/what-is-this

关于万恶的this和作用域。

 总结:作用域与funtion直接挂钩,funtion{==闭包的开始,与之对应的}==闭包结束,还有一个全局闭包。一个模块(相当于一个js文件)==一个闭包。funtion定义的闭包与调用无关,只与funtion声明的位置有关。闭包可以充当私有变量。闭包中有对象被引用,则整个闭包不会释放。

this表示的上下文跟着调用方法之前的对象走,比如a.display(),那display中的this指向的就是a,在文件中直接调用display(),则上下文会指向Global。

 

posted @ 2013-09-23 14:27  JasonZXX  阅读(864)  评论(0编辑  收藏  举报