网络日志

JavaScript 加密混淆之后运行 xxxx is not defined

0x0、xxxx is not defined 错误原因及解决方法

首先提示 xxxx is not defined 就是表示未定义。

发生原因:

如果你确定加密之前已经定义了这个“变量名”或者“方法名”,那应该是加密后“变量名/方法名”已经发生改变,导致外部调用的时候找不到这个“方法名/变量名”,才会出错误。

如原来函数(方法)为:

function test(){
  //todo 
}

加密后函数(方法)可能为:

function _0xaoem(){
  //todo 
}

这个时候你去调用 “test” 那肯定是未定义(test  is not defined)。解决办法:1.采用 最牛加密V6版本 ,保留 “变量名/方法名” 方法。如方法名或者变量名为 “test” ,那就这么添加即可。更多规则请点击对应后面的“?”符号可以看到具体的规则。这样加密后,这个“变量名/方法名”不会发生改变。就不会出现这个错误问题。2.提升作用域。原来函数书写:

function test(){
  //todo 
}

改成:

test = function(){
  //todo 
}
// or 
window.test = function(){
  //todo 
}

这样随便怎么加密,这个 test 方法会一直存在,并且调用不会出现test is not defined。

3.正确的书写(采用闭包)

我们都见过jquery,jquery就是采用闭包的方式书写。

简单来讲就是私有化所有方法(函数)和变量,然后提供公共访问方式。

我们打个样:

(function(w) {
    //定义私有化对象
    var T = {};
    //绑定方法
    T.test = function(){
        //todo 
    }

    //提供公共访问方式
    w.T = T;

})(window);




//调用test

T.test();

这样随便怎么加密,您后面都可以使用 T 来调用绑定在T上面的方法(函数)及变量。

结语:

其实当我们在写代码的时候就要考虑到这些,方便后面自己调用或者其他人的使用。所以从开始就要规划怎么写合适。而不是上来就干,谁都不爽。