IEで無名関数をevalする

目的

PHPからJavascriptのコールバック関数を定義したい。

方法

Javascript

var str = '<?php echo $this->fn ?>';

var fn = eval('false||' + str);
fn('test'); // alert('test')が実行される

PHP

$this->view->fn = 'function(e) {alert(e)}';

IEは独特

検索するといろいろ出てきますが、
IEでは eval('(function(e){alert(e)})') がうまく動きません。

なんで動くかはわからない

以下のコードも動く。

var str = function(e) {alert(e)};
var fn = eval('false||' + str);