このように、関数を作成した場合:
function a() {
alert("Hello!")
}
次のようなコードを表示できるようにしたくありません。
eval(a)
すべてのコードを返しますが、
eval(a())
アラートを返します
eval(a) を実行するときに、コードを返さないようにしたいのですが、どうすればいいですか?
このように、関数を作成した場合:
function a() {
alert("Hello!")
}
次のようなコードを表示できるようにしたくありません。
eval(a)
すべてのコードを返しますが、
eval(a())
アラートを返します
eval(a) を実行するときに、コードを返さないようにしたいのですが、どうすればいいですか?
変数をグローバル スコープに漏らさないように、常にコードを IIFE (Immediately Invoked Function Expression) にカプセル化します。
(function(){
function a() {
alert("Hello!")
}
// more stuff...
}());
console.log(eval(a)); //=> Uncaught ReferenceError: a is not defined
ちょっとしたトリックを使用して、関数コードを非表示にすることもできますbind
。
var a = function a() {
alert("Hello!")
}.bind();
console.log(eval(a)); //=> function () { [native code] }
を使用することを考えるときはいつでもeval
、よく考えてください。おそらくもっと良い方法があります。関数を実行したいだけの場合は、a()
. そこは必要ありませんeval
。