0

変数は他のオブジェクトのプロパティであることを私は知っています。例えば:

var myVar = 'something';

ウィンドウオブジェクトのプロパティです(もちろんグローバルスコープにある場合)。

変数のオブジェクトを見つけたい場合は、この変数を使用します。だが:

function f() {
    var myVar2 = 'something';
}

myVar2はどのオブジェクトに属しますか?(myVarはウィンドウオブジェクトに属していますが、 myVar2はどうですか?)

それを知りたいのですが、ありがとうございます。

4

3 に答える 3

2

オブジェクトに属していません。関数のスコープに属しますfmyVar内で行うことでアクセスしますf。の外ではアクセスできませんf

あなたがした場合

function f() {
  this.myVar = 1;
}

今、あなたはすることができます

var myF = new f();
myF.myVar

実際、これはユーザー定義オブジェクトが定義される方法です。

于 2012-08-02T01:14:56.413 に答える
0

myVar2f(の)ローカルスコープとグローバルスコープに属しmyVarます。

于 2012-08-02T01:17:50.117 に答える
0

varいくつかの興味深いことをします。varステートメントは、その機能範囲の一番上に引き上げられます。のvar機能範囲は、たまたま含まれる機能です。

JavaScript にはブロック レベルのスコープがありません。つまり、次のようになります。

(function () { //a closure to create new scope
    var foo;
    foo = 1;
    if (condition) {
        var bar;
        bar = 3;
    }
}());

...と同等です...

(function () {
    var foo,
        bar;
    foo = 1;
    if (condition) {
        bar = 3;
    }
}());

ステートメントに親がない場合、var代わりに変数をプロパティとしてグローバル コンテキストに追加します。これは Web ブラウザーではたまたまwindow.

これは、usingがプロパティを作成する唯一の場合です。varオブジェクトのプロパティを作成する場合は、次のように設定するだけです。

(function () {
    var foo;
    foo = {};
    foo.bar = 'baz'; //this creates the `bar` property on `foo`
}());

JavaScript は、プロトタイプ継承を持つプロトタイプ言語です。関数は第一級のオブジェクトです(JavaScript は関数に対して人種差別主義者ではないため)。これは、関数を他のオブジェクトと同じように使用できることを意味します。

それらを設定できます:

(function () {
    var foo;
    //foo is now a function
    foo = function () {
        alert('Hello World');
    };
}());

それらにプロパティを設定できます。

(function () {
    var foo;
    foo = function () {
        alert('Hello World');
    };
    foo.bar = 'baz'; //this works just fine
}());

それらをパラメーターとして渡すこともできます。

(function () {
    var foo,
        bar;
    foo = function () {
        alert('Hello World');
    };
    bar = function (c) {
        c();
    };
    bar(foo); //guess what this does?
}());

関数が行うもう 1 つの優れた点は、コンストラクターとして機能することです。newすべての関数は本質的にコンストラクターです。キーワードを使用して呼び出すだけです。

(function () {
    var foo; //case sensitive
    //it doesn't matter whether you use `function Foo`
    //or `var Foo = function...`
    function Foo() {
        alert('Hello World');
    }
    foo = new Foo();
    foo.bar = 'baz';
}());

コンストラクターを使用する際の重要な詳細は、関数のコンテキスト ( this) がコンストラクターによって作成されたオブジェクトに設定されることです。これは、コンストラクター内でオブジェクトのプロパティを設定できることを意味します。

(function () {
    var foo;
    function Foo() {
        this.bar = 'baz';
    }
    foo = new Foo();
    alert(foo.bar); //'baz'
}());
于 2012-08-02T01:24:27.163 に答える