Javascript 下面的代码段是什么意思? window.onload=函数(){ //一些代码 },函数(){ //一些代码 }();
它仅仅意味着在Javascript 下面的代码段是什么意思? window.onload=函数(){ //一些代码 },函数(){ //一些代码 }();,javascript,Javascript,它仅仅意味着在窗口.onload事件上执行多个函数吗?不,它并不意味着它将执行多个函数。如果您想实现这一目标,请按如下方式()执行: 在函数后使用括号()意味着您可以立即执行此函数,所以您不想使用它 您在示例中显示的逗号在本例中没有任何作用 你只要把它分开。将第一个函数绑定到onload事件,然后执行annonymus函数(因为使用括号()) 也许正确的格式将帮助您更清楚地看到它: function func1() { //some code } function func2() {
窗口.onload
事件上执行多个函数吗?不,它并不意味着它将执行多个函数。如果您想实现这一目标,请按如下方式()执行:
在函数后使用括号()
意味着您可以立即执行此函数,所以您不想使用它
您在示例中显示的逗号在本例中没有任何作用
你只要把它分开。将第一个函数绑定到onload事件,然后执行annonymus函数(因为使用括号()
)
也许正确的格式将帮助您更清楚地看到它:
function func1() {
//some code
}
function func2() {
//some code
}
window.onload = function(){
func1();
func2();
};
这仅仅意味着在window.onload上执行多个函数吗
事件
只有一个函数将在窗口上执行。onload
事件
查看原因:
这里有两个对我们很重要的操作符:=
和,
:
window.onload = function(){
//some code
},
function(){
// some code
}();
但是,由于=
运算符优先于,
运算符,因此,
的左侧变为:
window.onload = function1(){ }, function2(){ }()
而不是这个:
window.onload = function1(){ ... }
这就是为什么function1
被分配到window.onload
而不是function2
然后运行,
运算符的右侧,即function2
——由于它是一个IIFE,因此会在那里当场调用它,但它的返回值不会存储在任何地方
有关优先规则,请参阅:
总结执行顺序:
函数()
在这种情况下,只要加载标记中的整个脚本,就会执行f1
之后,一旦触发windows.load事件,就会调用与onload关联的函数。我不知道这一点,但它的工作原理相反。我想知道这段代码是如何工作的,它会在window.onload上同时启动两个函数吗?为什么不创建一个并找出发生了什么情况呢?你可以用逗号来分隔表达式,例如a=b,c=d
,所以实际上它只是一个规则的=
,后跟一个IIFE@teemu,是的,我刚刚创建了一个测试用例。加载时,这两个功能将以相反的顺序执行。谢谢你“如果你想承认你只需要再做一次:”不。在你的例子中显示的逗号u根本不起作用。“那不太正确。逗号运算符起作用。@Teemu:The=
的优先级高于,
,因此它是((x=“foo”),“bar”)
@Teemu:。由于,
是一个运算符,因此它强制将函数的计算
语法作为函数表达式。只有当逗号的一个操作数不能被视为表达式时,才会出现语法错误,比如x=“foo”,如果(true){}
@rockstar,这也正是我所期望的。这里有一个教训,不是说这个结构会有用,而是它有助于我将来在意外编写类似内容时进行调试。是的,但这是一个如何解释运算符优先级的问题,因为它们的优先级是相等的。换句话说,它被有效地重写,就像您添加了paren一样,如下所示:(a=(b=5))
,而如果它保持关联,它将是((a=b)=5)
。但评价仍然是从左到右的;首先计算a
绑定,然后执行其赋值,其中计算b
并进行赋值,给b
值5
,该值成为内部()
的返回值,给a
相同的值。要更好地测试它,可以调用window.onload()
在生活中。如果分配尚未发生,则.onload
将为null
,从而导致错误。这是一个演示“这意味着最右边的函数首先得到求值”不,这不是“赋值运算符是右关联的”的意思。赋值运算符的工作方式在这里并不重要。在这种情况下,只有其优先于逗号运算符才是重要的。@rockstar我已经使用console.log(window.onload)对其进行了测试代码>。不管怎样,谢谢你的分解。描述得很好+1如果我是超级学究,我会指出还有几个操作符(成员访问和函数调用),它们的优先级需要考虑,但我认为你的答案将重点放在这里。
window.onload = function1(){ ... }
function1(){ ... }