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

publicなどのアクセス修飾子について話している場合は、 Javascript がこれを処理する方法に関するこの記事privateを確認してください。主なコンポーネントは次のとおりです。

//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 に答える
0

ここでの問題は、 node.jsなどのサーバー側の JavaScript アプリケーションを使用しない限り、JavaScript は本質的にクライアント側のスクリプト言語であることです。

JavaScript がこのように使用されている限り、Web サイトから .txt ファイルをダウンロードするのと同じように、コード全体がダウンロードされます。唯一の実際の違いは、".js" 拡張子と、それを html<script>タグまたは AJAX 呼び出しに含めると、ユーザーのブラウザーがそれを JavaScript としてレンダリングすることを強制することです。

ただし、ユーザーがスクリプトを見つけにくくしたい場合は、実行可能です。Web サイトで AJAX 経由でスクリプトを取得し、それを DOM に追加することをお勧めします。これは、require.jsを使用するか、 Kickstrapを使用してスクリプトを「アプリ」にすることで実行できます。スクリプトは DOM にリンクとして表示されず、ユーザーは実際に検索する必要があります。スクリプトを縮小することで、(サイトの整合性を損なうことなく) さらに困難にすることができます。これにより、実行速度が向上しますが、フロントエンドで人間が判読できなくなります。

于 2012-10-02T15:09:44.080 に答える
0

JavaScript には関数スコープしかありません (tr​​y-catch の例外引数は例外です)。ES5letでは、ブロック スコープを達成するために (しゃれは意図していません) 使用できますが、ほとんどの UA がそれを実装するまでは役に立ちません。

したがって、外部とはdom Readyイベントの外部を意味する場合、機能は外部の世界から隠されています。

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

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

あなたが探しているのは「javascript難読化ツール」のようです。 これが一例ですコードの読み取りとコピーが非常に難しくなります。しかし、他の人が言ったように、実際には JavaScript を完全に隠すことはできません。

于 2012-10-02T15:03:12.943 に答える
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 に答える