わかりました、私はこの小さなコードを持っています
http://jsfiddle.net/laupkram/yJtyD/
今は実際には機能していません。ここSOで既存のすべての質問と回答に従っていましたが、これを補うことはできません。
本当に eval() を使わずに関数を呼び出したい
私はどこで間違っていたのですか?
わかりました、私はこの小さなコードを持っています
http://jsfiddle.net/laupkram/yJtyD/
今は実際には機能していません。ここSOで既存のすべての質問と回答に従っていましたが、これを補うことはできません。
本当に eval() を使わずに関数を呼び出したい
私はどこで間違っていたのですか?
タイプミス ( imafunc/iamfunc
) があります。修正してください (グローバル スコープを想定)。
var fn = window["iamfunc"];
if (typeof fn === 'function') {
fn("hello world");
}
文字列を直接実行することはできません。文字列で指定された関数がグローバルに定義されている場合、次の方法で関数にアクセスできます
window[ fn ]();
したがって、あなたの場合、これによりコードが次のように変換されます。
var fn = "imafunc";
if (typeof window[ fn ] === 'function') {
window[ fn ]("hello world");
}
function imafunc(str) {
alert(str);
}
関数が別の関数のスコープでのみ定義されている場合は、 に頼る必要がありますがeval
、これにはいくつかのパフォーマンス上の欠点があり、一般的に悪い習慣と見なされています (例: MDN を参照)。
PS: jsFiddle ではサンドボックスを使用しているため、これは機能しません。これは、imafunc()
別の関数内で定義するようなものです。「ラップなし」を使用するには、ラッピングを変更する必要があります。