考虑此JS(在body的末尾运行并导致错误)

(function(){
    "use strict";

    var div = document.getElementById("hook"),
        ul = div.firstElementChild,
        last_li = ul.lastElementChild;

    alert(div) // alerts "Uncaught TypeError: Cannot read property 'children' of undefined"

})();


然后,我删除了逗号并添加了var关键字,但是收到了类似的错误(不是HTML):

(function(){
    "use strict";

    var div = document.getElementById("hook");
    var ul = div.firstElementChild;
    var last_li = ul.lastElementChild;

    alert(div) // alerts "Uncaught TypeError: Cannot read property 'lastElementChild' of undefined "

})();


它唯一可行的方法是在alert()赋值之后直接添加div语句。我假设这与可变吊装有关,但经验不足以肯定。

有人可以简要介绍一下变量吊装吗,这可能是怎么回事?谢谢!

最佳答案

这不是吊装。

以下是发生的情况:

(function(){
    "use strict";

    // this returns an element otherwise the next line would not work
    // that means the element is found in the DOM
    var div = document.getElementById("hook"),
        // this returns the value `undefined` or `null`
        ul = div.firstElementChild,
        // this is a TypeError, since `ul` is undefined
        last_li = ul.lastElementChild;

    alert(div) // we never actually get to this line
})();


您的元素中可能没有元素(也许只是文本节点?)

这是fiddle reproducting the issue

这是fiddle where it works

关于javascript - 可能的变量吊装问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21097684/

10-12 07:26