在向网页添加一些初始化代码的同时,我发现自己写了inf
的时间非常短暂,当一个想法打击了我。
window.onload = ...
不是必需的,因为window.
是当前对象。所以它是可选的!
但没有人只写window
,我想知道为什么会这样。
我的意思是,我们对编写其他内容没有疑虑,比如onload = ...
没有alert
限定符。
window.
实际上,window.onload = function() {
alert('Your window has loaded');
};
与alert
一样是window
对象的一种方法。
那么,为什么差异呢?为什么像W3C这样的正式网站会这样做?
答案 0 :(得分:5)
我看到以下原因:
from selenium import webdriver
phantomJSPath = "C:\my working dir\\Lib\phantomjs.exe"
desiredCap = {'platform': 'ANY', 'browserName': 'phantomjs', 'version': '', 'javascriptEnabled': True}
browser = webdriver.PhantomJS(executable_path=phantomJSPath, port=0, desired_capabilities=desiredCap)
作为参数发送到函数,并且在其中使用了对窗口的本地引用。window
全局定义的函数/成员在范围内被覆盖,那么它将无法按预期工作,因此显式引用使其引用正确的函数/成员。这对于创建与全局函数具有相同名称的函数/成员非常有用,并且仍然可以从阴影作用域访问全局成员。答案 1 :(得分:1)
因为.onload
不是window
独有的。它也可以用作document.onload
。因此,您可以根据希望执行脚本的时间来定义它。
答案 2 :(得分:1)
当我们想要明确它时,我们写window.
。基本上有两种情况可以使用它:
window
对象的属性和方法 - 属于Window
interface的所有内容。您提到的.onload
听众就是一个例子,例如window.scrollY
,window.status
,window.parent
,window.open()
,window.focus()
,window.removeEventListener()
是其他人。window.myGlobalVar
是创建全局"变量"的常用JS习惯用法。无可否认,使用var
明确声明它仍然是更好的做法。虽然我们可以"可选"在这里省略window.
部分,它并不常见。特别是通过作业创建implicitly global variables被鄙视,通常被视为一个错误。因此,如果您是故意这样做的,请使用window.
声明您的意图。
然而,第一种情况并不总是定义明确。当我们想要使用的属性本质上是一个静态的全局变量时,我们经常省略window.
部分,并且即使在它上面正式指定它也不一定与window
对象相关。您很少看到任何人使用document
,atob()
,Worker
,setTimeout()
或fetch()
使用window.
前缀,就像您没有使用window.JSON.parse
前缀一样。 t使用window.Array
或navigator
作为内置对象(虽然它有效)。
对于其他一些属性,例如location
,alert()
或case object Mutate{
def apply( eo : IndexedSeq[Boolean] ): IndexedSeq[Boolean] = {
val point = (eo.length * scala.util.Random.nextDouble).toInt
eo.take( point - 1 ) ++ eo.slice( point-1,point ).map(!_) ++ eo.drop( point )
}
}
scala> Mutate( IndexedSeq( true, false, false, true, false, false ) )
res8: IndexedSeq[Boolean] = Vector(false, false, false, true, false, false)
scala> Mutate( Vector( true, false, false, true, false, false ) )
res9: IndexedSeq[Boolean] = Vector(false, false, false, true, false, false)
,它并不总是很清楚,并且可能会使用这些属性,而不管是否为。
答案 3 :(得分:-2)
窗口对象默认由浏览器初始化。它很好 练习明确定义窗口对象它对性能的影响和你的代码将变得可以理解。