Javascript 为什么removeItem中不需要括号?为什么li.onclick=removietem必须在newItem()函数中? 为什么removeItem不需要括号 为什么li.onclick=removietem必须在newItem()函数中 li.onclick事件发生时的逻辑顺序是什么?是否执行newItem()?如果是,它是如何触发的

Javascript 为什么removeItem中不需要括号?为什么li.onclick=removietem必须在newItem()函数中? 为什么removeItem不需要括号 为什么li.onclick=removietem必须在newItem()函数中 li.onclick事件发生时的逻辑顺序是什么?是否执行newItem()?如果是,它是如何触发的,javascript,html,Javascript,Html,我认为只有enter键才会触发newItem(),既然li.onclick=removietem在newItem()内,为什么单击会触发它 免责声明:我在网上找到了这段代码,但我不了解这些细节,希望你们能帮忙。谢谢 html javascript function newItem() { var item = document.getElementById("input").value; var ul = document.g

我认为只有enter键才会触发newItem(),既然li.onclick=removietem在newItem()内,为什么单击会触发它

免责声明:我在网上找到了这段代码,但我不了解这些细节,希望你们能帮忙。谢谢

html


    javascript

            function newItem() {
                var item = document.getElementById("input").value;
                var ul = document.getElementById("list");
                var li = document.createElement("li");
                if (document.getElementById("input").value != ""){
                    li.appendChild(document.createTextNode(item));
                    ul.appendChild(li);
                    document.getElementById("input").value = "";                
                }
                li.onclick = removeItem;
            }
    
    
            document.body.onkeyup = function(e) {
              if (e.keyCode == 13) {
                newItem();
              }
            }
    
            function removeItem(e) {
                e.target.parentElement.removeChild(e.target);
            }
    
    为什么removeItem不需要括号

    我想你指的是这行代码:

    li.onclick = removeItem;
    
    因为括号将调用函数并将其结果分配给
    li.onclick
    。函数不返回任何内容,也没有结果,如果调用它而不提供它期望的事件参数,将导致错误

    您没有调用函数,而是将函数的引用指定为
    li
    对象的
    onclick
    事件处理程序。稍后,如果用户单击该元素,则会调用该函数

    为什么li.onclick=removietem必须在newItem()函数中

    因为这就是变量的位置。您可以将
    onclick
    处理程序分配到任何您喜欢的位置,但为了将其分配给特定对象,您需要位于对该对象有引用的范围内。在该函数之外没有
    li
    变量,所以代码行没有意义

    li.onclick事件发生时的逻辑顺序是什么?是否执行newItem()?如果是,它是如何触发的

    不,将执行
    removietem()
    。浏览器为其提供了对单击事件的引用,该事件将位于该函数内的
    e
    变量中。这允许您引用
    e.target
    以查找单击的元素

    removietem()
    被触发,因为上面第一个问题中的
    li.onclick

  • 我在树屋找到了这样的解释:

    如果没有括号,就不会真正调用函数。不带括号的函数名是对函数的引用

    我们不在代码中使用括号,因为我们不希望在遇到代码时调用函数。相反,我们希望将对函数的引用传递到.focus()方法中,该方法将在元素接收到焦点时为我们调用函数

  • 不需要这样。但是,将事件绑定到您在JS中创建的元素的一种方法是在创建时将该事件绑定到元素。一旦插入DOM中,每个元素现在都将具有该事件。有时候,这可能更明智。例如,您正在经历一个For循环,创建元素并将它们插入DOM。您不必在以后再次循环添加单击事件,只需在此处执行即可避免执行更多工作


  • 您不需要括号,因为您正在存储对函数的引用。稍后将调用该函数。请参见以下示例:

    函数f1(){
    console.log(“f1调用”);
    }
    var函数_存储=f1;
    
    函数_存储()
    只是为了澄清一下,onclick处理程序将在其放置的任何位置触发,但该项必须可用,换句话说,如果它是一个局部变量,onclick处理程序必须放置在该函数中?@newbie:它与作为
    onclick
    处理程序没有任何关系。不能在不存在变量的范围内使用变量。
    li
    变量是声明的,并且只存在于代码中的特定函数中,因此它只能在该函数中使用。