JavaScript-引用类型变量的那个坑

HTML5学堂 :在JavaScript中,存在着两种不同的变量类型,一种是值类型变量,一种是引用类型变量。其中数组、对象、函数都属于引用类型变量,数值、布尔值、null、undefined、字符串属于值类型变量,不同类型变量在参数传递方面有不同的运行机制。

demo1

function changeName(username){

username = '刘国利';

}

var username = '独行冰海';

changeName(username);

console.log(username);

demo2

function changeName(username){

username[0] = '刘国利';

}

var username = ['独行冰海', '梦幻雪冰', '尹小芃槑', '路过心上', '扶、公子'];

changeName(username);

console.log(username);

两段代码输出结果分别是什么呢?第一段代码输出的是“独行冰海”的字符串,第二段代码输出的是["刘国利", "梦幻雪冰", "尹小芃槑", "路过心上", "扶、公子"] 这个数组。

JavaScript中的两种变量类型:值类型和引用类型。对于有过C语言等编程语言经验的人对这两种类型不陌生,很容易联想到“引用地址”或“指针”的相关概念。下面详细讲解一下两种不同类型的知识。相信在讲解了这两个知识之后,上面的问题也就迎刃而解了。

值类型变量

值类型:数值、布尔值、null、undefined、字符串。

变量的交换等于在一个新的作用域创建一个新的空间,新空间与之前的空间互不相关和影响。

欢迎沟通交流~HTML5学堂

引用类型变量

引用类型:对象、数组、函数。

变量的交换,并不会创建一个新的空间,而是让对象或方法和之前的对象或方法,同时指向一个原有空间(即一个地址)。就如同原来一个人有家门的钥匙,之后这个人结婚了,就配了一把钥匙给自己的妻子,这时候,两个人共同有家的钥匙,但是家还是一个家。

代码分析

弄明白了这两种不同的类型,我们就可以回看我们的代码了。先说第一段代码,外部全局中存在一个变量,username,在函数中形参名也为username,此时,当在局部作用域当中没有var声明变量空间的时候,遇到username这个变量名,首先查看是不是形参,如果是形参,那么直接认为changeName中的username就是形参。形参是属于changeName函数中的,加上传入的参数是值类型变量(字符串),就又创建了一个存储空间,这个存储空间是不会影响到外部全局变量创建的存储空间的。

第二段代码,虽然也是基本的形参,但是此处传入的是引用类型变量(数组),那么此时并没有创建一个新的空间,函数的形参以及全局的变量均指向同一个空间,当对两者任意的内容进行修改时,均是在修改一个空间。

欢迎沟通交流~HTML5学堂

Html5不允许修改但允许赋值,JavaScript | 引用类型变量的赋值问题相关推荐

  1. Javascript字符串及数组赋值区别

    最近做一个分页的javascript程序,需要先将tbody下面的tr标签全部删除,然后再append新的tr,使用下面的代码 var trs=$d("tbdoys").getEl ...

  2. 怎样用javascript给控件赋值,使在服务器端得到此控件的值?或怎样将前台的(或js)中的值传递到后台

    问: 怎样用javascript给控件赋值,使在服务器端得到此控件的值? _______________________________________________________________ ...

  3. JavaScript中字符串数组赋值失败,不是每个字符串,却是字符。

    我的处女作<Canvas系列教程>在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作. 教程介绍.教程目录等能在README里查阅. 传送门:https: ...

  4. 100行JS代码实现❤坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript )

    坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript ) HTML5坦克大战网页小游戏,完美还原小霸王学习机效果,以坦克战斗及保卫基地为主题,属于策略型类游戏. ...

  5. HTML5期末大作业:个人网站设计——个人旅游图片博客HTML5模板(7个页面) HTML+CSS+JavaScript 学生网页课程设计期末作业下载

    HTML5期末大作业:个人网站设计--个人旅游图片博客HTML5模板(7个页面) HTML+CSS+JavaScript 学生网页课程设计期末作业下载 临近期末, 你还在为HTML网页设计结课作业,老 ...

  6. js给php赋值,JavaScript_javascript给span标签赋值的方法,js给span标签赋值的方法?一般 - phpStudy...

    javascript给span标签赋值的方法 js给span标签赋值的方法?一般有两种方法: 第一种方法:输出html function s(){ document.getElementById(&q ...

  7. 深入理解PHP中赋值与引用

    原文:深入理解PHP中赋值与引用 先看下面的问题: <?php $a = 10;//将常量值赋给变量,会为a分配内存空间$b = $a;//变量赋值给变量,是不是copy了一份副本,b也分配了内 ...

  8. c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用

    1. 引言 引用在各种编程语言中都有涉及,如java中值传递和引用传递.python的对象引用也是学习python过程中需要特别关注的一个知识点,特别是对函数参数传递,可能会引起不必要的BUG.本文将 ...

  9. JavaScript引用数据类型

    JavaScript引用数据类型 引用类型 在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起(它也常被称为类). Object类型 创建Object实例的方式有两种.第一种 ...

最新文章

  1. YTU 2899: D-险恶逃生 I
  2. 根号均摊 ---- E. Xenia and Tree(树形dp + 暴力根号均摊)
  3. php 表单处理,用PHP提交from表单的处理方法
  4. msdn:什么时候画窗口
  5. JPA-CascadeType四个属性的讲解
  6. ArcEngine中画点画线画面
  7. Redis数据库(二)——数据类型
  8. YBTOJ危桥通行洛谷P3163:危桥通行(网络流)
  9. pip太慢豆瓣下载地址
  10. 重温.NET Remoting(一)
  11. iOS 录音,播放并上传
  12. 08-【go】go语言中的*和的使用方法
  13. Flash extractor功能介绍
  14. 高速公路计算机网络安全,计算机网络安全技术在高速公路收费网络的应用
  15. Scheduled里面报错No thread-bound request found
  16. java小组项目口号,小组口号霸气押韵大全(精选60句)
  17. 【2022-05-31】JS逆向之易企秀
  18. 大数据分析在病毒疫苗研究中的应用
  19. DevExpress:可左右滑动的图片框ImageSlider
  20. iOS开发 - 用AVPlayer封装一个播放器

热门文章

  1. 如何选用NAS、OSS和EBS
  2. VMware vSAN 7.0 发行说明
  3. Spring学习总结(23)——Spring Framework 5.0 新特性
  4. PHP学习总结(6)——PHP入门篇之PHP语句结束符
  5. linux查看网卡硬件 lsw,无人值守网络安装Linux系统
  6. web linux进程管理,详解Supervisor安装与配置(Linux/Unix进程管理工具)
  7. python 线程超时设置_python多任务之总结——(二)线程、协程
  8. cortex m4 中文手册_奥迪RS4 Avant都来了,新一代宝马M4还会远吗?
  9. 小白入门angular-cli的第一次旅程(学习目标 学习目标 1. 路由基础知识)补充学习...
  10. [C++设计模式] proxy 代理模式