一只斗牛犬
你可以试一下下面这段代码的执行结果就知道自己的问题在哪里了,这是js中的一个很典型的闭包问题,可以使用匿名函数解决.for(var i = 0;i<3;i++){ setTimeout(function(){ console.log(i); }, 200);};for(var j = 0;j<3;j++){ (function (j) { setTimeout(function(){ console.log('j',j); }, 200) })(j);};你所监听的一直是data[3],可以修改如下: (function(i,itemElement){ var watcherFn = function (watchScope) { return watchScope.$eval(propertyExpression, data[i]); } scope.$watch(watcherFn, function (newValue, oldValue) { itemElement.text(newValue); }); })(i,itemElement)