如果有全局变量但是我不希望用户随便拿浏览器的调试控制台去修改他们,可否把所有全局变量都封在一个函数里面呢?
这样的话,用户还能访问和修改这些变量吗?
比如这个样子(function ()
{
var a = 5, b = new Array();
})();然后我把所有代码全放这个匿名函数里面。
比如(function ()
{
var i = 5;
var add = function () {
i++;
}
var sub = function () {
i--;
}
})();如果要全局方法,那么去掉var,直接定义成全局方法。(function ()
{
var i = 5;
add = function () {
i++;
}
sub = function () {
i--;
}
})();
感觉这样对数据有点点保护作用。。但是不知道有没有方法照样能访问这个匿名函数里的局部变量?
比如有没有可能向这个匿名函数添加一个内部方法的?如果用户照样可以访问和修改这些变量,那怎么可以不让用户修改呢?JavaScript控制台全局变量

解决方案 »

  1.   

    public 才可以访问
    私有的是访问不了的
      

  2.   

    (function () {
        var a = 5, b = new Array();
        gets = function() {
          return a
        }
        
    })();gets();
      

  3.   

    如果是别人访问我的网站,那么我肯定不会写个gets方法来返回a,我想问别人是否能否用控制台得到a,b这种私有变量呢?比如写个这种gets添加到这个匿名函数里面?
    大概意思是
    假设有个getObject可以获得那个匿名函数,
    然后有个append方法可以向函数添加变量和方法什么的。
    于是可能有如下代码
    var func = getObject();
    var gets = function() {
        return a;
    }
    func.append(gets);
    当然getObject和append都是虚构的,但是按这个逻辑能否实现获取私有成员呢?
      

  4.   


    (function () {
        var a = 5, b = new Array();
        gets = function() {
          return a
        }
         
    })();
     
    gets();
    想取得a,b有些方法很简单的,记住js的覆盖,后声明的起作用。var outa,outb;
    (function () {
        var a = 5, b = new Array();
    outa=a;
    outb=b;
        gets = function() {
          return a
        }
         
    })();
     
    gets();
    不就可以了么,你调用的时候会调用你后面的那个方法,outa,outb已经有值了,因为他覆盖了前面的。
    js毕竟是客户端的东西想你怎么操作都可以。