当前位置:首页 > 日记 > 正文

Javascript中的值是通过值传递还是通过引用传递

Javascript中的值是通过值传递还是通过引用传递
最近有一个有趣的问题:js中的值是通过值还是引用传递的
在我们分析这个问题之前,我们需要知道什么叫值,什么是引用,在计算机科学中,这个部分叫做评价策略,它决定变量之间的值,函数调用和参数之间的值是如何传递的。
通过值VS传递值并传递引用。

按值调用是最常用的求值策略:函数的参数是调用时传递的真实参数的副本。修改参数的值不影响参数。
当引用传递(通过引用调用)时,函数的参数会收到对参数的隐式引用,而不再是一个拷贝。这意味着如果函数参数的值被修改,参数也将被修改。同时,两个点的值相同。
通过引用使函数调用的跟踪更加困难,有时会导致一些细微的错误。
由于需要每次复制一个副本,对于一些复杂类型的性能很低,这两种传输值的方式都有各自的问题。
让我们看一个C的例子来理解值和引用之间的区别。

复制代码代码如下所示:

无效修改(int p,int * q)

{

p=27;通过值p是参数的副本,只有p被修改。

* q = 27; q是对b的引用,q和b被修改。

}

主()

{

int = 1;

int = 1;

修改(a,b);通过a传递值,b通过引用传递,

a未改变,b更改

返回(0);

}
在这里我们可以看到:
p通过值,改变p的参数值不影响参数a,p只是a的副本。

q是通过引用传递的,修改参数Q值也会影响B参数的值。

JS价值转移模式探讨

js的基本类型是按值传递的。

复制代码代码如下所示:

var a=1;

函数(x){

x=2;

}

富(A);

console.log(一); / / 1,x = 2是不是由分配的影响
再看一遍对象:

复制代码代码如下所示:

var obj = { x:1 };

函数富(o){

OX = 3;

}

foo(obj);

console.log(obj,x); / / 3,修订!
它表明,O和obj是相同的对象,而不是一个复制的对象。所以它不是值传递。但这并不表明JS对象是通过引用传递的吗让我们看下面的例子。

复制代码代码如下所示:

var obj = { x:1 };

函数富(o){

o=100;

}

foo(obj);

console.log(obj,x); / /仍然是1,目标没有改变100。
如果是通过引用传递的参数,这个值应该被修改,而应该是受到影响。但修改啊,这里的值不影响对象。所以在JS对象是通过引用传递。因此该对象的值是通过JS
通过共享来传递呼叫

准确地说,在JS的基本类型是按值传递的,而对象的类型是通过共享(呼叫通过分享,通过对象,也被对象共享)。它首先是由Barbara Liskov提出的。在1974葡萄糖的语言。评价策略是用于诸如Python、java、露比多种语言,js等。
这一战略的关键是,当调用函数传递引用,该函数接受一份来自对象参考参考,不是复制对象的值传递,也不是一个隐式引用的引用传递。它不同于参考参考:函数的参数传递的共享的值不会影响这个参数的值,如下面的例子,该对象的值不能通过修改参数的值修正O.

复制代码代码如下所示:

var obj = { x:1 };

函数(o){

o=100;

}

foo(obj);

console.log(obj,x); / /仍然是1,目标没有改变100。
然而,尽管引用是副本,引用的对象是相同的,它们共享同一个对象,因此修改参数对象的属性值也会影响参数的属性值。

复制代码代码如下所示:

var obj = { x:1 };

函数富(o){

OX = 3;

}

foo(obj);

console.log(obj,x); / / 3,修订!
一个对象类型作为对象是可变的(mutable),修改对象本身影响借鉴和参考的共享对象的副本。对于基本类型,因为它们都是不可变的(不变的),是没有区别的共享传递和调用之间的价值,所以JS的基本类型,不仅适用于输送的价值,也为共享传递。

复制代码代码如下所示:

var a = 1; 1是数字类型,而不是B变量var = a;b = 6;
根据共享交付策略,a和b是两个不同的引用(b是a的参考副本),但引用相同的值。因为基本类型编号1在这里是不可变的,所以说值传递和共享没有区别。
基本类型的不可变属性

基本类型是不可变的(不可变的),只有对象是可变的(可变的)。例如,数值为100,布尔值为true,false,修改这些值(例如,1至3转,把真实的100)没有多大意义。什么是容易误解是串在JS。有时我们试图改变字符串的内容,但在JS,任何修饰,似乎是一个字符串值实际上是创建一个新字符串值。

复制代码代码如下所示:

var;

0;}

STR 0 } = d;

仍然是赋值无效。无法修改字符串的内容。
对象是不同的,对象是可变的。

复制代码代码如下所示:

var obj = { x:1 };

obj。x = 100;

var o = obj;

OX = 1;

对象X; / / 1,改性

O =真;

对象X; / / 1,O =真的不会改变
可变对象定义在这里,值对象,和对象的值。X属性设置为100,然后我们定义一个变量,这仍然是对象。当时,对OBJ和O点两变量的值相同的对象(同一个对象的引用),所以修改对象的内容对OBJ和O.但对象不是通过引用传递的影响,和O O =真正的价值是通过修改不影响目标。

相关文章

浅谈面向对象类中javascript的实现

浅谈面向对象类中javascript的实现

面向对象,浅谈,类中,电脑软件,javascript,物体是人们想要研究的任何东西,从最简单的整数到复杂的飞行器等等,都可以看作是一个物体。它不仅能表达具体的事物,而且能表达抽象的规则、计划或事件。——百度百科 面向对象编程(OP)是最流行的编程模…

PS图象处理软件以时尚大气与流美的

PS图象处理软件以时尚大气与流美的

美的,图象,大气,处理软件,海报,流体效应更为常用。例如,发现以下效果。作者会找到一些动态的人物图片,然后在衣服的边缘添加一些液体,然后添加一些几何图形和黑白背景。时尚的气氛充满紧张气氛。 流体效应更为常用。例如,我们应该找到一个相对…

PS图象处理软件净GIF动态惊艳

PS图象处理软件净GIF动态惊艳

动态,图象,处理软件,惊艳,电脑软件,本教程是GIF动态图片的制作方法到惊人的PS图象处理软件教程制作的效果很漂亮,很简单的方法,这里推荐爱的朋友可以跟着教程一起学习 我经常在网上看到一些动态的图片,他们觉得很刺眼。事实上,只要我们想做,我们…

jQuery实现瀑布流布局

jQuery实现瀑布流布局

瀑布流布局,电脑软件,jQuery,HTML 复制代码代码如下所示: CSS 复制代码代码如下所示: { * 保证金:0; 填充:0; } { #主要 职位:相对; } {。箱 填充物:00 15px 15px; 浮点数:左; } {。PIC 填料:10px; 边境:1px solid # CCC; 边界半径:5…

教你用人工智能制作漂亮而肥胖的字

教你用人工智能制作漂亮而肥胖的字

字体,人工智能,肥胖,教你用,漂亮,本教程是向朋友介绍的,用ai制作漂亮又可爱的胖字体,教程制作的字体非常可爱,难度不是很大,推荐给朋友,希望大家喜欢。 本教程是向朋友介绍使用ai制作漂亮而可爱的胖字体,教程制作的字体非常可爱,难度不是很大,但教…

jQuery实现单击和鼠标感应事件。

jQuery实现单击和鼠标感应事件。

单击,事件,鼠标,感应,电脑软件,1。实现单击事件的动态切换 我们谈到toggleClass()之前。对于单击事件,jQuery还提供了一个动态切换的切换()方法。该方法接受两个参数,这两个参数都是侦听器函数,它们在单击事件中交替使用。 示例:单击事件的动态交…

标志设计技术的图形化描述

标志设计技术的图形化描述

描述,图形化,标志,技术,电脑软件,这是初学者的笔记,对我自己的设计有一定的了解。我希望你能分享你的经验,创造一个更好,更合理的设计。 这是初学者的笔记,对我自己的设计有一定的了解。我希望你能分享你的经验,为你做一个更好更合理的设计。 …

实现jQuery搜索框效果的方法

实现jQuery搜索框效果的方法

方法,搜索,效果,电脑软件,jQuery,本文介绍了实现jQuery搜索框效果的方法,供大家参考,具体的实现方法如下: 复制代码代码如下所示: 搜索框效果 $(函数(){()) $(#搜索)。瓦迩(请输入搜索内容),AddClass(C1); $(#搜索')。焦点(功能)({ / /搜索框获得焦点 $(#搜索)…

人工智能创造一个美丽的浮雕材料课

人工智能创造一个美丽的浮雕材料课

创造,人工智能,浮雕,一个美丽,课程,本教程是介绍一个朋友通过使用AI创建美丽的浮雕材料的方法。本教程制作的材料非常有质感,难度不大。推荐并共同学习。 本教程是向大家介绍ai创建一个漂亮的浮雕素材的方法,效果很好的教程,推荐大家一起看看…

穷举置换(置换)算法的javascript实现

穷举置换(置换)算法的javascript实现

算法,穷举,电脑软件,javascript,令人费解的事 数组中元素的排列 策略 递归的减少和处理 Javascript的解决方案 复制代码代码如下所示: *由cshao 12 / 23 / 14。 * / 功能getpermutation(ARR){ 如果(arr.length = = 1){ {是}返回; } var置换{ }; …

用PS将数码照片转换成黑白照片的处

用PS将数码照片转换成黑白照片的处

照片,处理方法,转换成,数码照片,黑白,本教程介绍PS的处理方法和技能,使数码照片黑白照片。本教程更实用。对于以后的照片朋友来说,是值得学习的。建议你喜欢你的朋友一起学习。 本课程是PS照片处理。学习者介绍将数码照片转换成黑白照片的处…

ai简单快速地制造了一只眼睛

ai简单快速地制造了一只眼睛

一只,眼睛,快速,简单,电脑软件,本教程是介绍给一个朋友,利用人工智能创建一个眼球的方法简单快捷。本教程制作的眼睛非常逼真。方法很简单。像你的朋友一样,让我们一起学习。 本教程简要介绍了一个简单和快速发展的眼球与人工智能。教程很简…