Javascript for循环在Livescript中每次都指定相同的函数

Javascript for循环在Livescript中每次都指定相同的函数,javascript,loops,livescript,function-expression,Javascript,Loops,Livescript,Function Expression,我希望“x”的结果、“y”的结果和“z”的结果是一样的: 在Livescript中: x = a: -> 3 b: -> 4 y = {} for k, v of x console.log "key: ", k, "val: ", v y[k] = -> v.call this console.log "y is: ", y console.log "x's: ", x.a is x.b # should return false, r

我希望“x”的结果、“y”的结果和“z”的结果是一样的:

在Livescript中:

x = 
  a: -> 3 
  b: -> 4 

y = {}
for k, v of x 
  console.log "key: ", k, "val: ", v 
  y[k] = -> v.call this 


console.log "y is: ", y 
console.log "x's: ", x.a is x.b   # should return false, returns false
console.log "y's: ", y.a is y.b   # should return false, returns true

z = {}
z['a'] = -> 
  x.a.call this 

z['b'] = -> 
  x.b.call this 

console.log "z's: ", z.a is z.b  # should return false, returns false
x = 
  a: -> 3 
  b: -> 4 

y = {}
for k, v of x 
  console.log "key: ", k, "val: ", v 
  y[k] = ``function (){return v.call(this)}``


console.log "y is: ", y 
console.log "x's: ", x.a is x.b   # should return false, returns false
console.log "y's: ", y.a is y.b   # should return false, returns true

z = {}
z['a'] = -> 
  x.a.call this 

z['b'] = -> 
  x.b.call this 

console.log "z's: ", z.a is z.b  # should return false, returns false
在Javascript中:

var x, y, k, v, z;
x = {
  a: function(){
    return 3;
  },
  b: function(){
    return 4;
  }
};
y = {};
for (k in x) {
  v = x[k];
  console.log("key: ", k, "val: ", v);
  y[k] = function (){return v.call this};
}
console.log("y is: ", y);
console.log("x's: ", x.a === x.b);
console.log("y's: ", y.a === y.b);
z = {};
z['a'] = function(){
  return x.a.call(this);
};
z['b'] = function(){
  return x.b.call(this);
};
console.log("z's: ", z.a === z.b);
var x,y,k,v,z;
x={
a:函数(){
返回3;
},
b:函数(){
返回4;
}
};
y={};
对于(k/x){
v=x[k];
控制台日志(“键:,k,“val:,v”);
y[k]=fn$;
}
log(“y是:,y”);
log(“x's:,x.a==x.b”);
log(“y's:,y.a==y.b”);
z={};
z['a']=函数(){
返回x.a.呼叫(此);
};
z['b']=函数(){
返回x.b.呼叫(此);
};
log(“z's:,z.a==z.b”);
函数fn$(){
返回v.呼叫(本);

}
问题的根源是Livescript的
fn$
优化。以下代码运行良好:

现场脚本:

x = 
  a: -> 3 
  b: -> 4 

y = {}
for k, v of x 
  console.log "key: ", k, "val: ", v 
  y[k] = -> v.call this 


console.log "y is: ", y 
console.log "x's: ", x.a is x.b   # should return false, returns false
console.log "y's: ", y.a is y.b   # should return false, returns true

z = {}
z['a'] = -> 
  x.a.call this 

z['b'] = -> 
  x.b.call this 

console.log "z's: ", z.a is z.b  # should return false, returns false
x = 
  a: -> 3 
  b: -> 4 

y = {}
for k, v of x 
  console.log "key: ", k, "val: ", v 
  y[k] = ``function (){return v.call(this)}``


console.log "y is: ", y 
console.log "x's: ", x.a is x.b   # should return false, returns false
console.log "y's: ", y.a is y.b   # should return false, returns true

z = {}
z['a'] = -> 
  x.a.call this 

z['b'] = -> 
  x.b.call this 

console.log "z's: ", z.a is z.b  # should return false, returns false
Javascript:

var x, y, k, v, z;
x = {
  a: function(){
    return 3;
  },
  b: function(){
    return 4;
  }
};
y = {};
for (k in x) {
  v = x[k];
  console.log("key: ", k, "val: ", v);
  y[k] = function (){return v.call this};
}
console.log("y is: ", y);
console.log("x's: ", x.a === x.b);
console.log("y's: ", y.a === y.b);
z = {};
z['a'] = function(){
  return x.a.call(this);
};
z['b'] = function(){
  return x.b.call(this);
};
console.log("z's: ", z.a === z.b);

我不相信公认的自我回答。
v
参考仍在更改

您想要的是let的

y = {}
for let k, v of x 
  console.log "key: ", k, "val: ", v 
  y[k] = -> v.call this 

您将
fn$
分配给
y
的所有属性,那么为什么
y.a
y.b
应该不同呢?你希望它们包含什么?如果你检查你的控制台,你会看到
y
是一个带有
a:function fn$()
b:function fn$()
的对象,所以比较结果返回真值。我在发布问题后立即注意到
fn$
优化。非常感谢。