首先说说变量,JavaScript变量可以用来保存两种类型的值:基本类型和引用类型。

1,基本类型很好理解,源于基本数据类型:underfined,null,boolean,number和string。也就是简单的数据段,基本类型在内存中占据固定大小的空间,因此保存在栈内存中,提到栈内存,就想到了进栈出栈压栈,先进后出。下图是栈模型,后面会具体写一篇数据类型的随笔。

,

2,基本类型从一个变量向另一个变量时,会创建这个值的副本。

var a1=8;
var a2=a1;

a1是8,a2也是8,它的内存方式就像上面栈模型一样,a1在栈底,a2在它的上面,a1和a2是完全独立,所以对这两个变量操作相互不会影响
3,引用类型,保存的值是对象,保存在堆内存中,它可以添加修改删除属性和方法。

var person = new 0bject();
person.name="cqy";
console.log(person.name); //"cqy" var person = "cqy";
person.age="23";
console.log(person.age); //underfined

上面我声明了一个对象person,添加一个name属性,赋值为cqy,打印出来name值为cqy,说明成功添加属性name并赋值,而下面字符串就不能增加属性。

4,引用类型,当一个变量向另一个变量复制引用类型的值时,同样也会把值赋给新的变量中,这个值实际上是个指针,指针指向存储堆中的一个对象,

我个人理解啊,堆内存可以说是个完全二叉树,这个我们把这个堆内存,看成一堆,也就相对一个盒子,在盒子里面有多个对象,复制前变量和复制后变量都指向堆里面同一个object对象,所以说这个值,实际就是个指针。所以改变一个变量就会影响到另一个变量。举例说明:

var object1 = new Object();
var object2 = object1;
object1.name="cqy";
alert(object2.name); //值为"cqy"

5,传递参数,说白了也就是一个变量向另一个变量赋值,只不过这是从函数外部赋值到函数内部的过程。

注意,在传递参数时只能按参数传递,而不能用引用传递。

function setName(obj){
ocj.name = "cqy";
obj = new Object();//在局部重新定义一个对象,
obj.name = "jbname";//定义了一个不同的name
}
var person = new Object();
setName(person);
alert(person.name);
//如果按引用传递,person会自动修改为指向其name属性值为"jbname".
//这就说明原始的引用依然保持不变,内部重写obj会在函数执行后立即销毁。

javascript_变量的更多相关文章

  1. JavaScript_变量的自动转换和语句

    JS自动类型转换 var a = 1; var b = true; "==" 表示 可以自动类型转换,比较的是数值 "===" 表示可以自动类型转换,先比较数值 ...

  2. 6 小时 Python 入门

    6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...

  3. JavaScript_几种创建对象(2017-07-04)

    理解对象 1.创建Object实例 var clock = new Object(); clock.hour = 12; clock.minute = 10; clock.showHour = fun ...

  4. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  5. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  6. Shell特殊变量

    $ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...

  7. Java多线程基础——对象及变量并发访问

    在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...

  8. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  9. PHP源码分析-变量

    1. 变量的三要素变量名称,变量类型,变量值 那么在PHP用户态下变量类型都有哪些,如下: // Zend/zend.h #define IS_NULL 0 #define IS_LONG 1 #de ...

随机推荐

  1. mysql密码遗失

    仅以本地数据库测试 本地数据库密码遗失,百度上的方法很麻烦,想着没有用的一个本地库(localhost),就想删库重建,navicat上点击数据库,删除链接.然后在新建库,同名同端口的,此时密码已经制 ...

  2. Linux c使用gumbo库解析页面表单信息(一)

    一.gumbo介绍 gumbo是一个由谷歌开发的,能够解析html页面的库.功能稳定可靠,使用起来十分方便. 二.gumbo安装 (1)从https://github.com/google/gumbo ...

  3. Road of computer tec 01

    回顾自己过去将近3年的学习经历 当初报考的时候,自己是真正喜欢这个专业的么? 当初报这个专业的时候,对计算机还没有什么很明显的概念,只知道这个专业以后是要每天面对电脑的,喜欢不喜欢谈不上吧,但是还蛮感 ...

  4. 安装easydict

    在运行lightheadrcnn做test时,提示缺少easydict 不知道什么原因,用pip install easydict或者conda install easydict都没有用,不能安装ea ...

  5. nginx常用模块

    Nginx模块介绍 核心模块:core module 标准模块:stand modules HTTP modules: Standard HTTP modules Optional HTTP modu ...

  6. 运行go服务器后台挂起(不看调试信息)

    cd程序目录,shell输入go run+项目,接着键盘组合输入CTRL+Z,后台挂起进程. 要结束服务器,则输入fg,查看被挂起的go服务器进程,接着键盘组合输入CTRL+C,中断服务器进程. 此外 ...

  7. CXF 简单创建Webserver 例子

    最近在弄webserver,因为公司需要用到,来说说,webserver的常用方式吧 1.什么是webservice 1.1   什么是远程调用技术 远程调用数据定义:是系统和系统之间的调用 先说一说 ...

  8. vue项目使用前端框架开发,实现滑动效果,若不刷新页面则无法达到预期效果的问题及解决方法

    滑动等效果的初始化时机很重要,在vue项目开发中,需到mounted()钩子函数 (当组件中的DOM结构被渲染好并放到页面中后,会执行这个钩子函数,此时即可初始化滑动效果的js代码). 若组件未挂载到 ...

  9. python入门之小栗子

    1 点球小游戏: from random import choice score=[0,0]direction=['left','center','right'] def kick(): print ...

  10. java前端跨域请求后台接口

    response.setHeader("Access-Control-Allow-Origin", "*"); /* 星号表示所有的域都可以接受, */ res ...