var x=(function(){var u=1;})();
console.log(x.u); // undefined
是否有任何方法可以获取,访问或最终控制台.log u?
我可以在x中放入任何可能使你从外部易受攻击/可访问的代码吗?
编辑:我的意思是不“直接”回复你。有没有办法偶然暴露你?
答案 0 :(得分:6)
简答:不。私人是私人的。
稍微长一点回答: Javascript无法防止错误构思或执行编码,意外遗漏var
或在对象中返回或设置属性访问者(this.u = 1;
) (或访问子视图中的变量*)或弱咖啡。
如果正确使用并且理解正确,则必须在某种范围内公开范围内的本地/私有变量。如果有一些魔法巫毒可以暴露你的宝贵变量,我还没有看到它。 (没有证据证明或反驳雪人是否偷偷摸摸地球?!?)
这包括但不限于:
等等,等等。
*枪手上的枪手?
答案 1 :(得分:1)
不,没有办法。执行该函数后,没有剩下的变量,它引用了u
的值。因此,u
的值将被垃圾收集并丢失。
答案 2 :(得分:1)
我讨厌“私人"因为它推断内容受到保护而无法查看。
<script id="MyScript">
x=(function(){var u=1;})();
</script>
<script>
myvar = document.getElementById("MyScript").innerText;
document.write(myvar);
</script>
你被破坏了(因为没有泄漏内存),但是源代码不是并且可以查看,尽管使用javascript解析javascript很痛苦。
答案 3 :(得分:1)
(function() {
var bar = {};
bar.u = Number(0);
var x = (function(foo){
var u = foo.u = (function(n) { return !foo.n ? n : foo.n }(1)) ;
})(bar);
console.log(bar.u, x, typeof x);
}());
console.log(x, u, window.bar, window.foo);
答案 4 :(得分:0)
是的,您可以通过将其附加到函数本身来公开它:
var fn = function(){
this.u = "Secret value!";
return "Public value";
}
var x = fn.bind(fn)();
$('#returned').text(x);
$('#result').text(fn.u);
小提琴:http://jsfiddle.net/b29Xg/1/
我可以看到这对于调试很有用,但是如果你不小心的话,它也有可能引入非常顽固的错误。