3

わかりました、私はこの小さなコードを持っています

http://jsfiddle.net/laupkram/yJtyD/

今は実際には機能していません。ここSOで既存のすべての質問と回答に従っていましたが、これを補うことはできません。

本当に eval() を使わずに関数を呼び出したい

私はどこで間違っていたのですか?

4

2 に答える 2

4

タイプミス ( imafunc/iamfunc) があります。修正してください (グローバル スコープを想定)。

var fn = window["iamfunc"];

if (typeof fn === 'function') {
    fn("hello world");
}
于 2012-05-31T09:59:49.400 に答える
1

文字列を直接実行することはできません。文字列で指定された関数がグローバルに定義されている場合、次の方法で関数にアクセスできます

window[ fn ]();

したがって、あなたの場合、これによりコードが次のように変換されます。

var fn = "imafunc";
if (typeof window[ fn ] === 'function') {
     window[ fn ]("hello world");
}

function imafunc(str) {
    alert(str);
}

関数が別の関数のスコープでのみ定義されている場合は、 に頼る必要がありますがeval、これにはいくつかのパフォーマンス上の欠点があり、一般的に悪い習慣と見なされています (例: MDN を参照)。

PS: jsFiddle ではサンドボックスを使用しているため、これは機能しません。これは、imafunc()別の関数内で定義するようなものです。「ラップなし」を使用するには、ラッピングを変更する必要があります。

于 2012-05-31T10:01:08.953 に答える