0

JavaScriptにはFunction、無名関数を生成するコンストラクターがあります。

new Function()

関数を引数としてに渡すとFunction、構文エラーが発生します。

new Function(function(){})

を生成します

SyntaxError:予期しないトークン (

ただし、番号を渡すと、すべて問題ありません。

new Function(10)

関数をに渡すときに構文エラーが発生するのはなぜFunctionですか?

4

4 に答える 4

2

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

最後の引数以外はすべて引数名であることを考えると、文字列以外は機能しないと思います。

構文エラーは、使用しているJSエンジンが内部で関数を文字列に変換しようとする方法が原因だと思います。私は実際にそれが10で窒息しないことに驚いています。

また、好奇心からこれを行っているのではないかと思いますが、そうでない場合は、Function制御できるコードで使用しないことをお勧めします。実行時に文字列を取得して関数を作成する必要がない限り、Functionを使用する理由は実際にはありません。

于 2012-05-31T07:10:43.473 に答える
2

FunctionコンストラクターはString引数を予期し、最後の引数が関数本体であると評価するため、有効なjavascriptであると期待します。匿名関数の引数を文字列として評価しようとすると、その匿名関数の文字列表現が有効なjavascriptではないため、失敗します。

于 2012-05-31T07:10:53.293 に答える
0

そのエラーの方法はわかりませんが、次のようなものを試すことができます。

var func = function(){};
new Function(func)
于 2012-05-31T07:12:28.437 に答える
0

私は使用することをお勧めします:

new Function(func)

それ以外の

new Function(func(){})

ここで、funcを別の関数として定義する必要があります。次の例は、次のことを示しています。

<html>
<script>
function init(func)
{
    func();
}
function greet()
{
    alert("good morning!");
}
</script>
<body onLoad="init(greet);">
<body>
</html>
于 2012-05-31T07:32:25.253 に答える