2013-04-04 52 views
0

這樣,如果我做了一個功能:禁用視圖代碼

function a() { 
     alert("Hello!") 
    } 

我不希望你能夠查看代碼,如:

eval(a) 

返回所有代碼但

eval(a()) 

返回警報

當做eval(a)我希望它不返回代碼,只是沒有如何?

+0

你不能隱藏ECMAscript代碼,不是這樣,不能。您可以uglify和混淆代碼,這也很容易得到恢復。 – jAndy 2013-04-04 07:08:27

+0

是的,但它是一個計算器,所以它看起來有點瘋狂 – 2013-04-04 07:09:03

回答

0

始終封裝你的代碼在IIFE(立即調用函數表達式),所以你不漏變量全局範圍:

(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

+0

buton then eval(a())不起作用? – 2013-04-04 07:10:23

+0

作爲提示,你可能不應該使用'eval' ...儘可能避免。你想做什麼? – elclanrs 2013-04-04 07:11:04

+0

正是我想要的與本機代碼 – 2013-04-04 07:16:58