javascript関数のプライベート変数にアクセスすることは可能ですか?

JavaScript関数があるとします。変数xを含みます。

function A(){
   var x = 12+34;
}

外部関数xからxにアクセスすることは可能ですか?

1
あなたの最終目標は何ですか?たぶんあなたはオブジェクトを見る
追加された 著者 Pekka 웃,
あなたがそれを持っているかのように、それは「プライベート」なのです。数字と関数 x の両方の名前を付けることは、とても良い選択ではありません。
追加された 著者 pimvdb,
私は関数から変数にアクセスしたいJavaScriptライブラリを開発しています。私はそれがthis.x = 12 + 34の場合、外部からアクセス可能であることを知っています。
追加された 著者 Anoop,
追加された 著者 adarshr,

3 答え

No, the ability to do so would not make any sense. Suppose we changed your function slightly and called it 3 times:

function x(n){
   var x = n+34;
}

x(1), x(2), x(3);

この時点で関数は3回実行されているので、 x 変数は3回作成されています。次にガベージコレクションがあります。どのように参照とデータをメモリから消去することができたら、変数はもはや有効範囲に入っていなくても生き続ける必要があります。

必要に応じて、次のようなことを行うことができます:

function x() {
    x.x = 12+34;
}
x();

変数を静的/定常にする場合は

function x() { }
x.x = 12+34;

関数のスコープ外の別の名前で x を宣言することで、他の人が指摘しているように、

var y;
function x() {
    y = 12+34;
}
x();
3
追加された

名前で直接アクセスすることはできません。変数宣言から 'var'を削除してください。これは、変数をグローバルにするか、ready関数の外に置くべきです。関数からxの値を返します。

あなたはこのようなことをすることができます:

$(document).ready(function() {    
        var x;
        function x(){
            x = 12+34;
            return x;
        }
        alert(x());
});

こちらはjsfiddleです

お役に立てれば。

0
追加された

はい、上記の例でスコープではありません。クロージャを使用する必要があります。次の点を考慮してください。

var x,
    A = function() {
        x = 12 + 34;
    };

このようにして、関数Aの中からxにアクセスすることができます。xがAのプライベートメンバーに直接アクセスできるので、A以外のプライベートデータを漏らすことができます。

0
追加された
答えは質問に対処しません。この回答は、Shuslが求めていることとは根本的に異なる状況を説明しています。
追加された 著者 outis,
Shuslが何を求めているのか知ることはできません。 Shuslが実際に知りたいことに対処していない疑いがある場合は、明確化を要求する必要があります(ただし、それについてはさらにいくつかのポイントを得る必要があります)。あるいは、質問された質問に回答し、Andy Eのように質問者のニーズを予測するセクションを追加してください。それが立てば、「はい」はShuslの質問に対する間違った答えです。
追加された 著者 outis,
Shuslは、コードサンプルとテキストの両方で示されているように、関数外部の関数にローカル変数を設定することができるかどうかを質問しました(「JavaScript関数を持っています。 ..]外部関数[A]からxにアクセスできますか? ");正解は「いいえ」です。答えは、関数の内部の外で宣言された変数にアクセスすることです。私は質問を読み返す必要がある人ではない。
追加された 著者 outis,
「含む」という単語はローカルであることを暗示し、「x」は関数のローカルとして宣言されています。コードサンプルは何が尋ねられているかを示しています。言うまでもなく、 x がローカルの場合にのみ問題になる、外部(あなたの答えに書いているように、内部ではなく)変数にアクセスすることについての質問はありません。質問がローカル変数に関することがわからない場合は...あなたはトローリングしていますか?
追加された 著者 outis,
ローカルに x することを非常に暗示しています。あなたは、コードサンプルが x がローカルであり、関数内から関数の外で宣言された関数にアクセスする際に問題がないことを明確に示しているという事実を扱っていません。最後に、関数の外部から変数を参照する方法は表示されませんが、内部関数から変数を参照する方法が示されています。あなたの正確な言葉は "このようにして、関数Aの中からxにアクセスできます"皆さんは、回答者とコメント作成者の間で、あなたが持っているように質問を解釈する唯一の人です。
追加された 著者 outis,
@シャルスル:あなたはaustincheneyのためにこれをクリアしますか?
追加された 著者 outis,
(RE:contains)あなたが池に杯を投げた場合、池の一部にはカップの外に存在する(それには水が含まれていますが、それは池ではありません)ので、池には池がありません。 「含有する」とは、含有物が容器の限界によって制限されることを意味する。変数が関数に含まれている場合、関数内にのみ存在します。つまり、ローカル変数です。変数が関数の外に存在する場合、関数は単にその変数を参照またはアクセスします。
追加された 著者 outis,
Shuslが意図したことをどうやって知っているのでしょうか?おそらくShuslは大会/オプションとしての閉鎖を知らなかったので、まったくその1つの方法で質問をするとは思わなかったでしょう。
追加された 著者 austincheney,
Shuslは関数Aで変数xにアクセスする方法を尋ねました。私は答えました。あなたはその質問から何かを推測しているようですが、そのような特異性は提供されていないので、質問された質問に答えたようです。再度質問をお読みください。
追加された 著者 austincheney,
私はその言葉に地元の言葉やそのような言葉を見なかった。それは尋ねられたことではありません。
追加された 著者 austincheney,
そうです、彼は含まれていると言っていましたが、それは地元の人には言及していません。彼は決してローカルを言わなかったし、私の解はxへの参照を含む関数を示している。演算子は、関数の外部から変数を参照する方法についても尋ねました。私の答えは、それを行う方法を正確に示しています。私は質問に答えたので私はトローリングではありませんが、あなたがいるかと思います。
追加された 著者 austincheney,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript