🅰️

AngularJSの$broadcastはどのように引数を$onに渡しているのか

2021/07/04に公開

@armorik83です。毎日AngularJSをモリモリ書いてます。

broadcastからonへの引数渡し

AngularJSでは、最近は専ら$broadcast#$onしか使っていません。この辺についてはまた後日書く予定にしています。その$broadcast、どういう風に値を渡しているのか気になったので、念のため調べてみました。

ここです。1.3.14時点のソースを読んでいきます。

var listenerArgs = concat([event], arguments, 1),
    listeners, i, length;

L1231のconcatはAngularJS側の独自のUtilityのようで、実装はここです。$broadcast()の第1引数はnameなので、arguments, 1で第2引数以降のすべてと[event]を結合しています。このあとL1248で、

listeners[i].apply(null, listenerArgs);

しています。listeners[i]$on()内で発火しますが、その時の引数が$broadcast内で事前に束縛されるというわけです。

参照渡しでした

argumentsをapplyしているだけなので、なんの変わったこともしていません。ご安心ください!

以上です。

Discussion