为什么我们在 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
在 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