为什么我们在 javascript 函数中制作 "window.x = x = ..."?

Why do we make "window.x = x = ..." in javascript functions?

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

在 W3C 教程 (http://www.w3schools.com/js/js_scope.asp) 上,我发现:

var carName = "Volvo";

// code here can use window.carName

因为在HTML中,window对象是一个全局范围。

所以我的问题是 - 是否有任何逻辑,他们使用

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

而不是简单

pc1 = new RTCPeerConnection(servers);

我不是 javascript 开发人员,所以在官方 WebRTC 教程中找到这样的陈述有点令人困惑,而昨天我刚刚读到这样的陈述是不合逻辑的。

不同之处在于,如果您有一个同名的局部变量,那么在函数内部使用 pc1 与在外部使用它相比会 return 不同的值;

window.x = 10;

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

notify()

理想情况下,您应该只使用 window.pc1,因为您有一个全局副本。但在某些情况下,您希望拥有不同的值,并希望基于它更新两者。这种情况下,可以使用

window.pc1 = pc1 = ...

在您的代码片段中 post 不,没有理由这样做,因为 pc1 无论如何都可以在全局范围内访问。

但是,由于 javascript 的作用域性质完全相同,因此开发人员可以将代码包装在 iffe's 中,以避免所有这些变量污染全局作用域。

如果代码片段包含在 iffe 中,那么在该语句中进行声明会有所不同,因为否则(正如上面的评论所暗示的那样)该变量将无法在浏览器控制台上访问。

我写了这段代码 — 我同意它看起来有点奇怪 :)。

事实上,我认为这只是一个错误。目的是让 pc1 从控制台可见——但这是不必要的,因为 var pc1; 声明已经这样做了。 (也许 window. 在某些时候是必要的,以使变量在控制台中可见?不记得了。)

希望这是有道理的。

我做这个已经有一段时间了,但是这里的代码是不同的:github.com/webrtc/samples/blob/gh-pages/src/content/peerconnection/pc1/js/main.js