arguments.calleeがstrictモードで禁止な理由

これ軽くググっても理由がわからないんだが何で危険なの?>「arguments.calleeの使用が、ECMAScript 5のStrictモードがサポートしていないことからもわかるように、危険なこと」/無くてもまぁ困らないけど理由を知り… http://t.co/I9sPoAv0
2011-11-18 21:18:59
@kawaz それらは Good Parts に書いてないので、使うとダグラス様がマシンガン乱射して危険だからです。というか、caller はそもそも ECMA-262 で規定されたことがないとか、callee 使うくらいなら関数に名前つけろとか。
2011-11-18 21:38:35
@kawaz 補足。昔は関数リテラルだと名前がつけられなくて、再帰するには callee 使うしかなかったらしいけど、今は名前つけられるからもういらないよねキャハハーみたいな理由じゃないかな? cc/ @Constellation
2011-11-18 21:40:31
@koichik @kawaz SESをどうぞ. http://t.co/yOZThDWt http://t.co/v0WZxmvL http://t.co/sMTfqpi4
2011-11-18 21:43:30
@koichik へぇ、calleeがそもそも規定されたことがなって初めて知りました。無くても名前つければよいだけで大して困らないから良いけど、今後控えるにしても理由を知っておきたかったので。ありがとうございます、参考になりました。
2011-11-18 21:44:20
@koichik @kawaz あと手前味噌ですが, strict modeの話. http://t.co/8bVz35P5
2011-11-18 21:45:10
@kawaz そもそもなかったのは (今も strict mode でエラーになるってことしか書いてないけど) callee ではなくて caller の方です。
2011-11-18 21:50:09
@Constellation @koichik つまり「環境への影響力がある」ってのがstrictで使えない理由か。逆にこれを理解すると非strictでも再帰に使う程度の用途なら危険ではない、ってことになるのか。スッキリしました。
2011-11-18 22:12:08
@kawaz argumentsの環境連携とFunction.argumentsの存在がまずいから始まって, 呼び出し元とれるarguments.callerまずいとなって, でarguments.callee.callerまずいとなって, 廃止と認識していますー.
2011-11-18 22:34:41
@kawaz @koichik あと, argumentsが引数を表すもので, calleeがついてることを望まれていないというのがおそらく理由です. http://t.co/byA7crzi と書いたときに, calleeが取れるのは望ましくないということだと認識しています.
2011-11-18 22:44:05
@kawaz http://t.co/L3v0JHB9 再帰呼び出し時の実行コンテキストによってthisの参照先が変わるとか、callerプロパティで任意のスタック上の関数を参照できるようになると、インタプリタが安全に関数を実行することが事実上不可能になるのが問題みたいですね
2011-11-18 22:51:42
@Constellation 確かにそうですね。ていうかこうなるともうargumentsって最初からArray.prototype.slice.call(arguments)したのが入っててくれよって気にもなりますw
2011-11-18 23:23:39
@kawaz ES.nextではrest parameterが入ることになっており, こちらは単純な配列になる予定で, argumentsについては使わないようにという空気になっていますー.
2011-11-18 23:26:40
@Constellation そうなんですか。やっぱりみんなただの配列にしてくれよって思ってたんだなw とはいえ互換性も考えると結局Array.prototype.slice.call(arguments)を使うくらいまでが落とし所な感じですね。
2011-11-18 23:30:55
@constellation @kawaz SES の PDF 見始めたけど,caller.arguments[1] = ... なんて破壊的なことができたのね.知らなかったw そりゃ廃止するしかありませんな.
2011-11-19 00:44:49
っていうか,Function に arguments なんていらなくね? (ES5 にはなさげだけど) 呼び出しのたびに Function オブジェクトが変更されてるってキモい.
2011-11-19 00:47:58
@koichik という訳で, strict modeではこの割とろくでもない環境連携機能が削除されたりしましたー. http://t.co/toQtfLdX
2011-11-19 00:51:33