Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下面的代码段是什么意思? window.onload=函数(){ //一些代码 },函数(){ //一些代码 }();_Javascript - Fatal编程技术网

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,因此会在那里当场调用它,但它的返回值不会存储在任何地方

有关优先规则,请参阅:

总结执行顺序:

  • 函数1被传递(未执行)到window.onload
  • 函数2被执行
  • 。。。一段时间后,当文档加载完成时,它执行function1
  • 函数()

    在这种情况下,只要加载标记中的整个脚本,就会执行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(){ ... }