ng-repeat
新しいスコープを作成するためです。
特にjsのプロトタイプの継承についてすべてを知らない場合、ニュアンスを理解するのが少し難しいため、これは何度も回答されています: https://github.com/angular/angular.js/wiki/Understanding-Scopes
編集:この答えは非常に物議を醸しているようです。明確にするために、これがJSの仕組みです。JS がどのように機能するかを理解する前に、Angular を学ぼうとするべきではありません。ただし、リンクが欠落しているようです
したがって、この場合の JS の動作の例を次に示します。
var a = {value: 5};
var b = Object.create(a); // create an object that has `a` as its prototype
// we can access `value` through JS' the prototype chain
alert(b.value); // prints 5
// however, we can't *change* that value, because assignment is always on the designated object
b.value = 10;
alert(b.value); // this will print 10...
alert(a.value); // ... but this will print 5!
では、どうすればそれを回避できますか?
つまり、継承チェーンを「強制的に」通過させることができます。これにより、値にアクセスする場合でも変更する場合でも、常に正しいオブジェクトにアクセスしていることを確認できます。
var a = {obj: {value: 5}};
var b = Object.create(a); // create an object that has `a` as its prototype
// we can access `value` through JS' the prototype chain:
alert(b.obj.value); // prints 5
// and if we need to change it,
// we'll just go through the prototype chain again:
b.obj.value = 10;
// and actually refer to the same object!
alert(b.obj.value == a.obj.value); // this will print true