1

你好,

我有我的主文件,其中包含我的 javascript 文件。

在我的 javascript 文件中,我有这个

$(document).ready(function(){

  //some functions here

});

我想要此页面可用的所有功能,我知道您可以通过执行类似的操作将它们隐藏到 javascript 的外部世界

(function(){
$document.ready(function(){
//my functions
)};
}).init();

但我不是 100% 确定如何调用它,或者它是否正确。

任何对此有所了解的人都会有很大的帮助!

4

8 回答 8

1

在 javascript 中,函数内声明的所有内容仅在该函数内可用(除非您声明没有关键字 var 的变量)。

因此,您传递给 $().ready() 的函数内的所有内容仅在该函数内可用。

$(document).ready(function () {
    //all code here is scoped inside this function, so it can't be accessed
    // outside of this function

}); 
于 2012-10-02T15:03:28.343 回答
0

就像第一条评论说你不能对用户隐藏它们,如果他们真的想看到它,他们会看到它。如果你真的想的话,你可以用某种方式清理它们,比如

var mySpace = {};
mySpace.init = function() {
    // your init functions here
};

在文档准备好你只需打电话

mySpace.init();

我不确定这是否是您想要的,但这是我理解问题的方式

于 2012-10-02T14:55:33.633 回答
0
(function(){
    var secret1 = function(msg) {console.log("Secret Message:" + msg);}
    $document.ready(function(){
        secret1("this can only be called from within");
    )};
})();
secret1("this will cause a script error");
于 2012-10-02T14:59:26.433 回答
0

听起来您正在寻找的东西是“javascript 混淆器”。 是一个例子。它使代码更难阅读和复制。但正如其他人所说,您实际上无法完全隐藏 javascript。

于 2012-10-02T15:03:12.943 回答
0

这里的问题是 JavaScript 本质上是一种客户端脚本语言,除非使用诸如node.js之类的服务器端 JavaScript 应用程序。

只要以这种方式使用 JavaScript,就会下载整个代码,就像从网站下载 .txt 文件一样。唯一真正的区别是“.js”扩展名及其包含在 html<script>标记或 AJAX 调用中将强制用户的浏览器将其呈现为 JavaScript。

但是,如果您想让用户更难找到脚本,这是可行的。我建议让您的网站通过 AJAX 检索脚本并将其附加到 DOM。您可以使用require.js或使用Kickstrap并将您的脚本制作成“应用程序”来执行此操作。该脚本不会在 DOM 中显示为链接,用户真的必须搜索它。您可以通过缩小脚本使其变得更加困难(而不损害您网站的完整性) 。这将使它运行得更快,同时无意中使其在前端的可读性降低。

于 2012-10-02T15:09:44.080 回答
0

在 JavaScript 中只有函数作用域(try-catch 中的异常参数是异常)。ES5 将允许您使用let(不是双关语)来实现块范围,但在大多数 UA 实现它之前它不会有用。

所以你的功能对外界是隐藏的,如果在外面你意味着在 dom 准备好的事件之外。

$( document ).ready( function () {
    var myFunc = function () {};
} );

myFunc();// <- ReferenceError: myFunc is not defined
于 2012-10-02T15:10:24.857 回答
0

您无法真正隐藏这些功能,因为它位于客户端下载的文件的源代码中,但您可以制作它,这样他们就无法从 javascript 访问您的功能。

(function() {

    var doStuff = function() {
        // Not Accessible
        console.log('You can\'t reach me!');
    }

    return {
        'init': function() {
            // Accessible
            doStuff();
        }
    }


})().init();
于 2012-10-02T15:14:01.940 回答
0

如果您正在谈论访问修饰符public,例如private等。然后查看这篇文章,了解 Javascript 如何处理这个问题。以下是关键组件:

//constructor function (class)
function Maths(x, y) {
//public properties
    this.x =x;
    this.y = y;

    //public methods
    this.add = function () { _sum = x + y; return _sum; }
    this.mod = function () { _mod = x % y; return _mod; }

    //public method calls private method
    this.show = function () {
    this.add();
    this.mod();
    showResult();
}

//private variables
var _sum=0;
var _mod=0;

//private methods
function showResult() {
    alert( "sum: " + _sum + ", mod: " + _mod );
}

}
//end function

//create instance
var plus = new Maths(3, 4);
plus.show();

//static method multiply, you can use it without instance of Maths
Maths.multiply = function (x,y) {  return x * y; }

//call static method by constructor function (class) without instance of Maths
var result = Maths.multiply(5,7);
alert(result);
//output: 35
于 2012-10-02T20:15:32.943 回答