js变量引用(指针)
2014-02-27 11:53
141 查看
1.变量类型:基本类型和引用类型
在js 中,基本类型:Number,Boolen,null,String,Underfined 存放在栈内存中,数据长度是固定的。
而引用类型,Object存在堆内存中,数据长度是变化的(同时有栈内存中有一个指针指向这个Object的)。
2.引用类型的Object能任意指定新的成员,但是对于基本类型就是无效。
var str=’ahui’;
str.name=’xiaoming’;//无效。
alert(str.name);//undefined
3.关于复制
基本类型:在新的栈内存中生成一个副本
引用类型:在新的栈内存中存一个相同的指针
也就是说:其赋值不会开辟新内存空间。两个变量会保存完全相同的数据。
4.传参数——js中所有的参数都是按值传送的,而不是按引用。
(这一点等同于复制)
注:按值传递并不意味着你所传参数不会因为函数的执行而受影响。如果参数本身是引用类型,那么所复制的参数本身也包含相同的指针,参数的改变当然会影响到所传的变量。
在js 中,基本类型:Number,Boolen,null,String,Underfined 存放在栈内存中,数据长度是固定的。
而引用类型,Object存在堆内存中,数据长度是变化的(同时有栈内存中有一个指针指向这个Object的)。
2.引用类型的Object能任意指定新的成员,但是对于基本类型就是无效。
var str=’ahui’;
str.name=’xiaoming’;//无效。
alert(str.name);//undefined
3.关于复制
基本类型:在新的栈内存中生成一个副本
var a='stra',b; b=a;//这里会所b数据拷贝到a所在的栈内存中 b='strb';//a='stra'
引用类型:在新的栈内存中存一个相同的指针
也就是说:其赋值不会开辟新内存空间。两个变量会保存完全相同的数据。
var objA=new Object(); objA.name='stra'; var objB=objA;//objB在栈内存的指针和objA在栈内存中的指针是值是相同的——指向同一个堆块 objB.name='strb'; alert(objA.name);//strb alert(objB.name);//strb
4.传参数——js中所有的参数都是按值传送的,而不是按引用。
(这一点等同于复制)
注:按值传递并不意味着你所传参数不会因为函数的执行而受影响。如果参数本身是引用类型,那么所复制的参数本身也包含相同的指针,参数的改变当然会影响到所传的变量。
var o=new Object; o.name='ahui'; function func(obj){ obj.name='This variable is changed'; } func(o); alert(o.name);//This varibale is changed
相关文章推荐
- 谈谈JavaScript中的变量、指针和引用
- 关于类成员变量为引用与指针的思考
- C++ 引用变量(十二)-- & b *b和C的传递指针形参一样效果
- 返回指向局部变量的指针或引用
- C/C++中关于地址、指针和引用变量的学习笔记(一)
- 转载:写了10年Javascript未必全了解的连续赋值运算 --> 说明了JS中变量是引用
- 指向结构体变量的指针引用结构体变量的成员
- 结构体内可以包含自身的指针(链表实现方法)或 引用 但不可以包含自身变量即递归 (因为这样一来结构体大小就无法确定了)
- 有关js的变量作用域和this指针的讨论
- c++中函数中变量内存分配以及返回指针、引用类型的思考
- 指针、引用、一般变量(int 等)作为函数参数的结果对比
- 在Js(JavaScript)和aspx中引用Asp.Net的.cs文件中传过来的变量参数!(实例)
- shell中的指针-变量的间接引用
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- C/C++中关于地址、指针和引用变量的学习笔记(六) : const和void
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- html文件 得到或者引用js变量的值
- 第二章 头文件、变量和基本类型(8)——复合类型(引用与指针)
- 为什么C++中千万不要返回局部对象或变量的引用和指针