似乎很少人一般谈论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,萧边
分享你的内容。我们希望能给你一个参考,希望你能
支持我们。