2016-10-27 11 views
1

:私が見つけたW3Cチュートリアル(http://www.w3schools.com/js/js_scope.asp)でなぜ "window.x = x = ..."をjavascript関数で作るのですか?私はいくつかの場所に次のコードを発見したのWebRTC公式サンプルで

var pc1; 
...//some code 
function call() { 
    //...some code 
    // Add pc1 to global scope so it's accessible from the browser console 
    window.pc1 = pc1 = new RTCPeerConnection(servers); 
    //... 
} 

を、その:

var carName = "Volvo"; 

// code here can use window.carName 

HTMLで、ウィンドウオブジェクトであるためグローバルスコープ

だから私のquestion-は、任意のロジックはそれがに少し紛らわしいですので、彼らは、代わりに私はjavascriptの開発者ではないよ、単純な

pc1 = new RTCPeerConnection(servers); 

window.pc1 = pc1 = new RTCPeerConnection(servers); 

を使用したことを、そこにあるさ昨日公式のWebRTCチュートリアルでそのような記述を見つけました。

+0

そのための必要はありませんが、 'call'機能のスコア内部以来' pc1'変数を意味している(グローバルです - 'window.pc1'と同じです。 – Dekel

+0

' let pc1; 'を使用していたのでは違いがありました。 – jib

+0

@jib no let、no var – Krystian

答えて

2

を使用することができます。

しかし、コード全体をiffe'sにラップして、これらの変数すべてでグローバルスコープを汚染しないように、javascriptと同じスコープの性質があるためです。

コードスニペットがiffeでラップされていた場合、それ以外の理由で宣言するのに違いがあります(前述のコメントと同様に)ので、変数はブラウザコンソールからアクセスできません。

1

同じ名前のローカル変数を使用している場合は、関数内にpc1を使用すると、外部で使用する場合とは異なる値が返されます。

window.x = 10; 
 

 
function notify(){ 
 
    var x = 20; 
 
    console.log(x) 
 
} 
 
console.log(x) 
 

 
notify()

あなたがグローバルなコピーを持っているように理想的に、あなただけのwindow.pc1を使用する必要があります。しかし、あなたが異なる価値を持ち、それに基づいて両方を更新したい場合があります。あなたはそれが何のPC1はとにかくグローバルスコープでアクセスできるようになり、これが行われる理由はありません投稿していないような状況下で、あなたはコードスニペットでは

window.pc1 = pc1 = ... 
1

私はこのコードを書いた - と私は少し奇妙に見えます:)

実際、私はそれがちょうど間違いだったと思います。意図はpc1をコンソールから見えるようにすることでしたが、これはすでにvar pc1;宣言が行っているので不要です。 (おそらくwindow.は、ある時点で、変数をコンソールに表示させるために必要でしたか?覚えていないかもしれません)。

希望があります。私はこの上で働いていたので、しばらくして、しかしここでコードが異なっている

github.com/webrtc/samples/blob/gh-pages/src/content/peerconnection/pc1/js/main.js