js程序设计02——变量作用域问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js程序设计02——变量作用域问题相关的知识,希望对你有一定的参考价值。

首先,ECMAScript中的数据类型分为基本类型、引用类型,基本类型的访问操作是按值的。引用类型的值是保存在内存中的对象,操作对象时,实际上操作的是对象的引用,而非对象自身。“javascript高级程序设计”中的描述是“当复制保存着对象的某个变量时,操作的是对象的引用。但在为对象添加属性时,操作的是实际的对象”,下面从数据复制来看下:

var num1 = 12;
var num2 = num1;
num2 = 13;
console.log(num1);//12
console.log(num2);//13

var obj = new Object({
  "name":"admin1"
});
var obj2 = obj;
obj2.name = "test";
console.log(obj.name);

基本类型的值进行复制时,复制的仅仅是内存中的值,变量的地址是在内存中重新开辟的空间,所以这里对num2重新赋值后num1并没有改变;

引用类型进行复制时,变的是将新值的引用指向原有的值,这样一来,新值和旧值便指向了同一内存区域,两个变量实际上将引用同一个对象,因此这里对obj2的操作会影响到obj对象。

 

以上是关于js程序设计02——变量作用域问题的主要内容,如果未能解决你的问题,请参考以下文章

JS---闭包

JavaScript 作用域 与 作用域链

JS (全局作用域)

JS 作用域及作用域链

JS 作用域及作用域链

读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题