2016-10-27 4 views
1

В WebRTC официального образца я нашел в некоторых местах следующий код:Почему мы создаем «window.x = x = ...» в функциях javascript?

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); 
    //... 
} 

На W3C Tutorials (http://www.w3schools.com/js/js_scope.asp) Я нашел, что:

var carName = "Volvo"; 

// code here can use window.carName 

Поскольку в HTML, объект окна глобальный охват.

Так что мой вопрос- есть какая-то логика, что они использовали

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

вместо простого

pc1 = new RTCPeerConnection(servers); 

Я не разработчик Javascript, так что это немного сбивает с толку найти такое заявление в официальном учебнике WebRTC, когда вчера я только что прочитал, что такое утверждение нелогично.

+0

Там нет необходимости в том, что, так как внутри 'call' функции Счёт' pc1' переменная является глобальной (что означает - это то же самое, что и 'window.pc1'. – Dekel

+0

Если бы они использовали' let pc1; ', тогда это имело бы значение. – jib

+0

@jib no let, no var – Krystian

ответ

2

В фрагменте кода, как вы не оставлять его не существует никаких причин, это делается ПК1 будет доступен в глобальном масштабе в любом случае.

Однако, из-за того же самого вида JavaScript для разработчиков, чтобы обернуть код в iffe's, чтобы избежать загрязнения глобальной области всеми этими переменными.

Если фрагмент кода был завернут в iffe, тогда было бы иметь смысл объявить как в этом выражении, потому что иначе (и, как следует из вышеприведенного комментария) переменная не будет доступна на консоли браузера.

1

Разница заключается в том, что у вас есть локальная переменная с тем же именем, а с помощью функции pc1 внутри функция возвращает другое значение по сравнению с использованием ее снаружи;

window.x = 10; 
 

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

 
notify()

В идеале, вы должны использовать только window.pc1, как у вас есть глобальный экземпляр. Но может быть случай, когда вы хотите иметь другое значение и на его основе вы хотите обновить оба. При таких обстоятельствах, вы можете использовать

window.pc1 = pc1 = ... 
1

Я написал этот код - и я согласен, это выглядит немного странно :).

На самом деле, я думаю, что это была просто ошибка. Намерение состояло в том, чтобы отобразить pc1 с консоли - но это не нужно, так как объявление var pc1; уже делает это. (Может быть, window. был необходим в какой-то момент, чтобы сделать видимую переменную в консоли? Не могу вспомнить.)

Надеюсь, что имеет смысл.

Давненько я работал над этим, но код здесь отличается: github.com/webrtc/samples/blob/gh-pages/src/content/peerconnection/pc1/js/main.js

Смежные вопросы