首先说说变量,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. Apache Spark 3.0 将内置支持 GPU 调度

    如今大数据和机器学习已经有了很大的结合,在机器学习里面,因为计算迭代的时间可能会很长,开发人员一般会选择使用 GPU.FPGA 或 TPU 来加速计算.在 Apache Hadoop 3.1 版本里面 ...

  2. 笨办法33while循环

    改了之前的代码,加入while: #coding: utf-8 print("王小狗丑不丑?丑→1:不丑→2") answer = input(">") ...

  3. 【转载】 [unreal4入门系列之七] UE4中的Actor类和Pawn类

    原文地址: http://www.52vr.com/article-558-1.html 现在我们开始进入UE4的代码开发工作.首先,UE4的类框架是非常庞大的,看起来有点让人措手不及.不过正因为UE ...

  4. SQL-51 查找字符串'10,A,B' 中逗号','出现的次数cnt。

    题目描述 查找字符串'10,A,B' 中逗号','出现的次数cnt. SQL: select length('10,A,B')-length(replace('10,A,B',',','')) len ...

  5. Win10调整MTU值

    VPN连接后出现可以ping通google.com但是网页打不开的情况,需要修改MTU值,方法如下:用管理员身份运行cmd列出当前各网络的mtu值C:\Windows\system32>nets ...

  6. 常用MySQL操作(一)

    第二十四次课 常用MySQL操作(一) 目录 一.设置更改root密码 二.连接mysql 三.mysql常用命令 四.mysql用户管理 五.常用sql语句 六.mysql数据库备份恢复 七.扩展 ...

  7. linux发布环境初始化脚本

    #参数配置 homeDir=$(pwd) tomcatDir=$homeDir/tomcat logDir=$homeDir/tomcat/logs backUpDir=$homeDir/backup ...

  8. 安装oracle数据库的操作步骤

    1. vnc启动之后,进入数据库安装包所在目录,此处是/home/DB/backup/database 2. 输入命令 ./runInstaller 3. 弹出linux图形化界面,同时弹出Oracl ...

  9. 关于redis实现分布式锁

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  10. 微信小程序 画布drawImage实现图片截取

    大多数图片都大小不一,选择框的尺寸也是宽高相等的,就会有图片被压缩 解决方法: 1.可以使用画布对图片先进行截取,保存截取图片(用户自己选取,或者指定图片中心区域截取),但是对于多张图片手动截取,会影 ...