JSの初心者が困惑しやすい問題は変数ですか?属性ですかthisの指向

1347 ワード

問題
case 1:
var a = {
    name: 'jiavan',
    bname: name
};
console.log(a.bname);
case 2:
var a = {
    name: 'jiavan',
    bname: this.name
};
console.log(a.bname);
case 3:
var a = {
    name: 'jiavan',
    bname: a.name
};
console.log(bname);
分析
まずcase 1を見てください.これは基本差の学生がよく犯している誤りです.対象の内部で、対象の属性を変数として使っています.その出力結果は空です.なぜですか?新しいコードで説明します.
var a = {
    'name': 'jiavan',
    bname: name
};
console.log(a.bname);
「name」とnameの違いに注意してください.一つは対象属性で、一つは変数で、そして重要なのは対象内のこのname変数はまだvarに宣言されていないので、グローバル変数になりました.信じられません.window下でnameをマウントしたかどうか見てください.
case 2、thisは古い伝説で、上の結果はcase 1と同じです.注目すべきは、thisは誰が生成したのか、具体的な値は何かを把握していない人が多いです.上の方は対象の属性値にthisを使っています.この時、thisは全体を指しています.つまり、windowはいつ生成されますか?
実はthisは関数によって生成されたもので、関数の内部属性であり、argmentsと同様に関数の内部属性であり、関数実行時に生成された値ですか?thisの値は常にファイルデータを指して実行する環境です.単純に関数を呼び出すオブジェクトとして理解できます.
jsには二つの作用領域しかありません.一つは大域で、一つは関数級の作用域です.直接対象の属性にthisを使うと、この時thisはwindowです.そして、全体的に一つのname属性が値しません.
case 3は、前の二つの分析を見て、第三の分析は分かりやすいはずです.cname属性にa.nameを使用しました.aはまだ定義が完了していません.直接に使用できないので、windowに変数aをマウントしました.属性nameにもアクセスしました.変数の初期値を与えないのはデフォルトundefinedです.undefinedの属性にアクセスできますか?
ええ、大体このようにして、不謹慎なところがあります.ご指摘ください.