高洛峰2017-05-19 10:30:18
obj オブジェクトに書かれた str:"world" は obj.str="world" を意味するためです。これは変数ではなくプロパティです。最後に実行した obj.fun() で表示されるのは、属性ではなく str 変数です (もちろん、これはグローバル ウィンドウの属性でもあります)。それでわかりましたか? this.str または obj.str にアラートを付けると、「world」を取得できます。
ringa_lee2017-05-19 10:30:18
変数 str は実際には window の属性であり、obj オブジェクトの str 属性とは何の関係もありません。これにはスコープチェーンの問題は関係ありません。次のことを理解してください:
リーリーこの例では、関数変更で最初にグローバル変数 str が再割り当てされます。alert(str) を実行する場合は、独自のスコープ チェーンの開始点、つまり独自の変数内で変数 str を探します。オブジェクトが見つからない場合は、上に進みます。レベル 1 の検索で str 変数が見つかりましたが、この時点では str が world に再割り当てされているため、world が表示されます。