2017-07-08 5 views
0

私は定期的にこのような変数をJavaScriptコードを参照してください。"var d =ドキュメント;"本当に便利ですか?

var w = window, 
    d = document, 
    e = d.documentElement, 
    g = d.body; 

w.addEventListener('resize', function() { 
    ... 
    d.querySelectorAll(...); 
    ... 
}); 

変数のこれらの種類を使用することに関心がある場合、私はちょうどだろうか? (「文書」または「ウィンドウ」への呼び出しが多い場合は、コード量を減らす以外に) 答えは「いいえ」だと思いますが、ちょうどいいケースです...

+1

細分化...いいえいいえreaon – adeneo

+1

yesオブジェクトを50x反復しなければならない場合は、 – PRMoureu

+1

が可読性を低下させます。また、ローカル変数として 'var d'をどこかに持っていれば、バグの影響を受けやすくなります。 – frozen

答えて

2

答えは「はい」です。あなたのコードは、あなたのコードがgまたはeを使用していないため、それらを使用する方法はありません。

あなたのコードはこれらの変数をグローバルにし、グローバルは避けるべきです。これを行うには、変数を囲むラッパースコープを作成する即時呼び出し関数式(IIFE)でコードをラップします。しかし、インダイレクションのレイヤーが存在するため、上位スコープの要素への参照は、スコープチェーンを上に進んで定義を見つけることで解決する必要があります。

グローバル(またはより高いスコープの)オブジェクトへの参照を小さいスコープに渡す場合は、スコープチェーンを上回らないようにスコープの高いオブジェクトへのローカル参照があるため、パフォーマンスをわずかに向上させることができます。あなたはこれをしなかったのであれば、:

(function(w, d){ 
    // Within this function w and d are local references to global objects 
    w.addEventListener('resize', function() { 
    ... 
    d.querySelectorAll(...); 
    ... 
    }); 

}(window, document)); 

そして、これらの宣言(ここでは、実際の引数)を持つことは理にかなって。

また、あなたがオブジェクト参照を「解決」する必要があり、いつでも、あなたがそれらを解決するための以下の手順は、パフォーマンス良く、しばらくので:両方があるので、

var w = window; 
var d = document; 

は特に有用ではありません常にグローバルで利用できる、これら

var g = document.body; 
var e = document.documentElement; 

あなたはbodydocumentElementプロパティに格納されているオブジェクトを検索する必要がないので便利であり、あなたはbodyとを解決するには、「ヒット」撮影しましたDOMオブジェクトは一度だけですが、後でそれらを何度も何度も解決することなく直接アクセスできます。

+0

申し訳ありません、あなたの答えに感謝します!今ははるかに明確です。 –

-1

はい、それはあなたがvar d=document書くとき、あなたは method

例で、この変数を使用したい場合は、それが容易になり、この変数の内部文書保管されている、便利です:

var d = new Date() 
document.write(d.getHours()) 

をここでd変数の中にnew Date()を格納すると、他の場所で使用しやすくなります。

+0

あなたはその質問を誤解しています。そして、いいえ、変数の中にドキュメントを格納していません。オブジェクトが見つかる場所のメモリアドレスを保存するだけです。最後に、あなたのコードは単に 'document.write(new Date())'と書くことができます。オブジェクトへのアクセスを継続する必要がない場合は、変数を作成しても何も購入しません。 –

+0

私は最初の点を忘れています、そのアドレスは文書ではなく保存されています。説明してくれてありがとう! –

0

あなたが役に立ったと感じたら便利です。

プログラムの作成時に文字数を減らすためのショートカットとして使用している人がいます。

私にとっては、読みやすさが減り、グローバルスコープに変数を追加すると予期しない問題が発生する可能性があります。

関連する問題