Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对closed over变量的更改是否在使用闭包的回调中可见?_Javascript - Fatal编程技术网

Javascript 对closed over变量的更改是否在使用闭包的回调中可见?

Javascript 对closed over变量的更改是否在使用闭包的回调中可见?,javascript,Javascript,如果在闭包中有一个数组,并且该闭包已作为回调传递,那么对该数组的更改在回调中是否可见 例如 函数选择器(func){ this.func=func; } ctor.prototype.do=函数(){ this.func(); } var-arr=[]; 函数doSomethingWithArr(){ 对于(变量i=0;iconsole.log(arr[I]),在这里搜索类似的问题,我什么也没找到 对数组的更改是否在回调中可见 是的,闭包确实保留了对闭合变量的引用,但它不会创建值的副本(在数组的

如果在闭包中有一个数组,并且该闭包已作为回调传递,那么对该数组的更改在回调中是否可见

例如

函数选择器(func){
this.func=func;
}
ctor.prototype.do=函数(){
this.func();
}
var-arr=[];
函数doSomethingWithArr(){
对于(变量i=0;i
我问这个问题的原因是,在尝试了这个方法后,它不起作用,甚至在纠正了我的输入错误之后:
console.log(I)
->
console.log(arr[I])
,在这里搜索类似的问题,我什么也没找到

对数组的更改是否在回调中可见


是的,闭包确实保留了对闭合变量的引用,但它不会创建值的副本(在数组的情况下,值仍然是对象引用)。

谢谢。我想还有别的地方不对劲。上面的例子似乎对我不起作用。@Hector:Hm,因为你编辑到
arr[i]
它确实记录了我将你的代码逐字复制到控制台时所期望的内容
function ctor ( func ) {
  this.func = func;
}

ctor.prototype.do = function() {
  this.func();
}

var arr = [];

function doSomethingWithArr() {
  for ( var i = 0; i < arr.length; ++i ) {
    console.log( arr[i] );
  }
}

var a = new ctor( doSomethingWithArr );

a.do(); // should print nothing

arr.push( "Hello" );
arr.push( "World" );

a.do(); 
// expect:
// "Hello"
// "World"