[解決済み] eval()とnew Function()は同じものですか?
2022-11-28 12:47:10
質問
これらの2つの関数は、裏で同じことを行っているのでしょうか?(単一ステートメント関数で)
var evaluate = function(string) {
return eval('(' + string + ')');
}
var func = function(string) {
return (new Function( 'return (' + string + ')' )());
}
console.log(evaluate('2 + 1'));
console.log(func('2 + 1'));
どのように解決するのですか?
いいえ、それらは ではない であり、同じです。
-
eval()
は、現在の実行範囲内でJavaScriptの式として文字列を評価し、ローカル変数にアクセスすることができます。 -
new Function()
は文字列に格納された JavaScript コードを関数オブジェクトにパースし、それを呼び出すことができます。コードは別のスコープで実行されるため、ローカル変数にアクセスすることはできません。
このコードを考えてみましょう。
function test1() {
var a = 11;
eval('(a = 22)');
alert(a); // alerts 22
}
もし
new Function('return (a = 22);')()
が使われていた場合、ローカル変数
a
はその値を保持します。とはいえ、Douglas Crockford のような JavaScript プログラマは
はどちらも使うべきではありません。
でない限り
絶対に必要
を評価・使用し
Function
コンストラクタを使用することは安全ではありませんし、賢明でもありません。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] URLを新しいタブで開く(新しいウィンドウではない)
-
[解決済み] .prop() vs .attr()
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JavaScriptの関数名を文字列で指定して実行する方法
-
[解決済み】JavaScriptのeval()が悪でないのはどんなとき?
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] CORS: 認証モードは 'include' です。