目录
复制变量值
参数传递
首页 web前端 js教程 Js参数传递与变量复制

Js参数传递与变量复制

Oct 26, 2017 am 10:05 AM
javascript 变量 复制

   ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。

  5 种基本数据类型: Undefined、 Null、 Boolean、 Number 和 String。这 5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。ES6有多出一种Symbol类型。

  引用类型的值是保存在内存中的对象,JavaScript 不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。

复制变量值

  • 【复制变量值】复制基本类型变量的值,会在该变量对象上创建一个新值,然后把该值复制到新变量分配的位置上。任一变量值操作互不影响。

  • 【复制引用指针】复制引用类型变量的值,同样会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是这个值的副本实际上一个指针,而这个指针指向存储在堆中的一个对象。复制后,两个变量实际上将引用同一个对象。因此,改变任意变量,都会影响另一个变量。

参数传递

  ECMAScript 中所有函数的参数都是按值传递的。访问变量有按值和按引用两种方式,而参数只能按值传递。
  

  • 基本类型参数传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见。

var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2
登录后复制
  • 引用类型参数传递:传给函数的是数值的一个引用,函数中对其属性的修改外部可见,但用新引用覆盖其则在外部不可见

var a = [1, 2, 3];
var b = [5, 6];
function change(a,b) {
  a[0] = 4;    //对其属性的修改外部可见 
  var c = a;
  a = b;      //用新引用覆盖
  b = c;
  console.log(a);  //"5,6"        
  console.log(b);  //"4,2,3"
}
change(a,b);
console.log(a);    //"4,2,3"
console.log(b);    //"5,6"
登录后复制

  a,b是change函数中的变量,在调用函数时传递了a,b的引用赋给了这两个变量,但是并不能改变全局中的a,b。因为用新引用覆盖在外部不可见,因为函数只是拿到了引用 并没有权力更改引用。

var a = [1, 2, 3];
var b = [5, 6];
function change() {
  var c = a;
  a[0] = 4;    //对其属性的修改外部可见 
  a = b;      //用新引用覆盖
  b = c;
}
change(a,b);
console.log(a);  //"5,6" 
console.log(b);  //"4,2,3"
登录后复制

  因为js没有块级作用域,所以它在change里找不到变量a,b就会自觉的到上层去找,所以这里的a,b是全局变量的引用。


☞☞☞深究JavaScript系列☜☜☜

   ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。

  5 种基本数据类型: Undefined、 Null、 Boolean、 Number 和 String。这 5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。ES6有多出一种Symbol类型。

  引用类型的值是保存在内存中的对象,JavaScript 不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。

复制变量值

  • 【复制变量值】复制基本类型变量的值,会在该变量对象上创建一个新值,然后把该值复制到新变量分配的位置上。任一变量值操作互不影响。

  • 【复制引用指针】复制引用类型变量的值,同样会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是这个值的副本实际上一个指针,而这个指针指向存储在堆中的一个对象。复制后,两个变量实际上将引用同一个对象。因此,改变任意变量,都会影响另一个变量。

参数传递

  ECMAScript 中所有函数的参数都是按值传递的。访问变量有按值和按引用两种方式,而参数只能按值传递。
  基本类型参数传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见。

var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2
登录后复制
  • 引用类型参数传递:传给函数的是数值的一个引用,函数中对其属性的修改外部可见,但用新引用覆盖其则在外部不可见

var a = [1, 2, 3];
var b = [5, 6];
function change(a,b) {
  a[0] = 4;    //对其属性的修改外部可见 
  var c = a;
  a = b;      //用新引用覆盖
  b = c;
  console.log(a);  //"5,6"        
  console.log(b);  //"4,2,3"
}
change(a,b);
console.log(a);    //"4,2,3"
console.log(b);    //"5,6"
登录后复制

  a,b是change函数中的变量,在调用函数时传递了a,b的引用赋给了这两个变量,但是并不能改变全局中的a,b。因为用新引用覆盖在外部不可见,因为函数只是拿到了引用 并没有权力更改引用。

var a = [1, 2, 3];
var b = [5, 6];
function change() {
  var c = a;
  a[0] = 4;    //对其属性的修改外部可见 
  a = b;      //用新引用覆盖
  b = c;
}
change(a,b);
console.log(a);  //"5,6" 
console.log(b);  //"4,2,3"
登录后复制

  因为js没有块级作用域,所以它在change里找不到变量a,b就会自觉的到上层去找,所以这里的a,b是全局变量的引用。

以上是Js参数传递与变量复制 的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

qq音乐歌词怎么复制 歌词复制的方法 qq音乐歌词怎么复制 歌词复制的方法 Mar 12, 2024 pm 08:22 PM

  我们用户们在使用这款平台的时候应该都能够了解到上面对于一些功能的多样性,我们知道一些歌曲的歌词都写的非常的不错。有时候甚至都会多听几遍,觉得其中的含义都是非常深刻的,所以我们想要去了解其中的胜意,就想要直接的复制下来当文案来使用,不过对于要使用的话,还是要学会如何去复制歌词才可以,这些操作方面我相信大家们应该都并不模式,但是在手机上面操作确实是有点难度,所以为了能够让大家们更好的了解的话,今日小编就来为你们好好的讲解上面的一些操作体验,如果你们也喜欢的话,就和小编一起来看看吧,不要错过了。 

什么是Java中的实例变量 什么是Java中的实例变量 Feb 19, 2024 pm 07:55 PM

Java中的实例变量是指定义在类中,而不是方法或构造函数中的变量。实例变量也称为成员变量,每个类的实例都有自己的一份实例变量副本。实例变量在创建对象的过程中被初始化,以及在对象的生命周期中保存并保持其状态。实例变量的定义通常放在类的顶部,可以用任何访问修饰符来声明,可以是public、private、protected或默认访问修饰符。这取决于我们希望这个变

如何使用Ajax从PHP方法中获取变量? 如何使用Ajax从PHP方法中获取变量? Mar 09, 2024 pm 05:36 PM

使用Ajax从PHP方法中获取变量是Web开发中常见的场景,通过Ajax可以实现页面无需刷新即可动态获取数据。在本文中,将介绍如何使用Ajax从PHP方法中获取变量,并提供具体的代码示例。首先,我们需要编写一个PHP文件来处理Ajax请求,并返回所需的变量。下面是一个简单的PHP文件getData.php的示例代码:

Python 语法的思维导图:深入理解代码结构 Python 语法的思维导图:深入理解代码结构 Feb 21, 2024 am 09:00 AM

python凭借其简单易读的语法,广泛应用于广泛的领域中。掌握Python语法的基础结构至关重要,既可以提高编程效率,又能深入理解代码的运作方式。为此,本文提供了一个全面的思维导图,详细阐述了Python语法的各个方面。变量和数据类型变量是Python中用于存储数据的容器。思维导图展示了常见的Python数据类型,包括整数、浮点数、字符串、布尔值和列表。每个数据类型都有其自身的特性和操作方法。运算符运算符用于对数据类型执行各种操作。思维导图涵盖了Python中的不同运算符类型,例如算术运算符、比

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

PS复制图层快捷键 PS复制图层快捷键 Feb 23, 2024 pm 02:34 PM

在PS复制图层快捷键中,我们可以知道使用PS的时候如果想要进行复制图层的操作,可以使用到快捷键【Ctrl+J】进行快速复制。这篇复制图层快捷键的介绍就能够告诉大家具体的操作方法,下面就是详细的内容,赶紧看看吧。PS复制图层快捷键答:【Ctrl+J】具体方法:1、在ps中打开图像,选中需要复制的图层。2、键盘同时按下【Ctrl+J】,即可完成对图层的复制。其他复制方式:1、打开图像后,按住图层,向下放【新建图层】图标移动。2、移动到该图标上后,松手。3、即可完成图层复制。

学习使用复制粘贴的快捷键 学习使用复制粘贴的快捷键 Jan 13, 2024 pm 12:27 PM

很多的用户们在使用电脑的时候,如果遇到一些需要复制粘贴的东西时,用鼠标复制非常麻烦,那么复制粘贴的快捷键需要如何使用呢,快来看看详细的教程吧~复制粘贴快捷键怎么用:1、复制键:Ctrl+C,选择需要复制的文字或图片,按下快捷键。2、粘贴键:Ctrl+V,在需要粘贴的位置上,直接按下快捷键就行了。

剪切和复制有什么区别 剪切和复制有什么区别 Mar 22, 2024 pm 03:58 PM

1、剪切指的是将选定的内容从一个位置移动到另一个位置的操作。2、复制操作是在选定的内容上创建一个副本,并将这个副本保存在系统的剪贴板中,且原内容会保留在原来的位置上。3、如果用户想把内容移动到其他位置并删除原来的位置上的内容,就可以使用剪切操作。4、如果用户需要创建内容的副本,且在不影响原内容的情况下将其粘贴到其他地方,那就要使用复制操作。

See all articles