js(值和地址)的引用和复制简介

js(值和地址)的引用和复制简介
似乎很少人一般谈论JS引用和复制,却发现这个概念可以帮助理解很多东西。

让我们从一些非常基本的东西开始,看看在JS中传递了什么类型的数据类型。

引用:对象、数组、函数

复制:布尔数

字符串本身由于其特殊性,无法确定引用的转换或复制值(因为字符串的值没有改变,所以这个问题是没有意义的),但是当比较清楚地属于值比较时(稍后具体比较)。

下面是使用的详细信息。

最常用的是分配。
var a=1;
var a;a / FU值的副本
B+;
警报(a);1B更改不影响
/****************************************/
var = { 1 };
var是一个
b { 0 } +;
警报(a);2B对A的修改也是有效的,当然B = 2 };a的修改是没有用的。
函数的参数

将值传递给函数是对函数外部更改不可见的值的副本。

var a=1;
var b=2;
函数变化(a,b){
var;
a;
乙=丙;
警报(a); 2
警报(b); 1
}
改变(A,B);
警报(a); 1
警报(b); 2
地址转换:函数的引用传递给函数,函数中的属性的修改在外部可见,但在外部不可见,例如新的引用覆盖。

var = { 1, 2, 3 };
var = { 5, 6 };
函数变化(a,b){
{ 0 } = 4;修改外部可见的属性。
var;
a;
乙=丙;
警报(一); / / 6
警报(B); / / 4,2,3
}
改变(A,B);
警报(一); / / 4,2,3
警报(B); / / 6
从结果中,我们可以看出A和B是不能互换的,因为用新的引用覆盖外部隐形是很自然的,因为函数只是引用,并且没有改变引用的权利。

下一个是不同的
var = { 1, 2, 3 };
var = { 5, 6 };
函数更改(){
var;
{ 0 } = 4;
甲=乙;
乙=丙;
};
变化();
警报(一); / / 6
警报(B); / / 4,2,3
这是一次成功的交流。

而JS提到的块级范围,这在某些语言中应该是肯定没有定义错误的,因为JS没有阻止级别范围,所以它在找变量A时找不到,B会自觉地往上找,所以这里的A,B是全局变量的引用。

顶部的A和B是变化函数中的变量。当A被调用时,B的引用被分配给两个变量,但是它不能改变整个世界中的A或B。名称更改可能更容易理解。

这提供了一些稍微偏离主题…

回到比较操作参考和复制

传输值的比较是数值与参考值的比较,即使值相同,引用也不同。

1 = 1; /真
1 = 1
{ 0 } { 0 }; / false
{ 0 } { 0 } { 0 } { 0 }; /真
{ 0 } { 0 } { 0 } { 0 }; /真
({ 0 }。toString)( / /真实= = { 0 }。toString);
它在壁橱里。

关闭可能是我们部门JS最纠结的事情,面试经典试题,往往不减。

在这里我不会说一些关于闭包的东西,只通过参考值和参考部分的一天,我可以确定自己的实例条例,用简洁明了的语言和生动的完全清楚的说明,然后介绍JS就不用提了…

在闭包中,内部函数使用外部函数的局部变量使用引用而不是副本。

事实上,这也是理解闭包的一个非常重要的部分,它可以用来解释一个经典的闭包现象。很多地方在解释闭包时都会用到一个例子。

应该构造一个函数,在单击节点时设置事件处理程序到数组中的节点,即警报节点号。
无功add_handlers =功能(节点){
var i;
为(i = 0,L = nodes.length;i < L;i++){
结{我}。onclick=功能(e){
警报(i);当然,这里是每个警报不可避免的结果,是节点总数。
}
}
};
为什么每个警报都是节点总数,而不是期望的序列号,如果用复制和引用来解释它是相当容易的。

因为内部函数使用参考而不是副本外部变量的使用,这是当我呼叫事件的每个节点设置onclick将我参考的警觉,当我点击节点触发onclick事件,我的价值已成为总的节点数量…

无功add_handlers =功能(节点){
var i;
为(i = 0,L = nodes.length;i < L;i++){

结{我}。onclick=功能(我){
返回函数(){
警报(一);
}
}(一);
}
};
这种修改的原因是,i值是在当时复制的,这与普通函数相同。不要因为添加一个闭包而感到困惑。很清楚,当我们返回源代码时,我们可以理解源地址。

顺便说一句,不要关闭这个奇怪的名字欺骗你,事实上,我们通常使用的功能原理和它是一样的,抛开生命周期更长的变量称为对私有财产保护的封闭,把它作为一个正常的功能(你也可以改变函数的角度为整个一个特殊的闭包),这是很容易理解的。

关键是放下一切浮华,回到最本质的一面…

上述引用和复制的JS,萧边分享你的内容。我们希望能给你一个参考,希望你能支持我们。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部