为什么window.addEventListener不起作用?

时间:2013-06-20 15:41:17

标签: javascript

在window.onload事件中,我想要一个函数被调用。 如果我将其定义如下,则不会调用该函数。

try {
    window.addEventListener("load", initialiseTable, false);
} catch(e) {
    window.onload = initialiseTable;
}

var initialiseTable = function () {
    console.log("hello world!!");
};

但如果我将函数声明更改为

function initialiseTable() {
    console.log("hello world!!");};

它有效,任何想法?

5 个答案:

答案 0 :(得分:4)

当您使用var x = function(){}声明函数时,应该在调用函数之前声明它。

function x (){}x将存在于当前范围内,无论它何时声明。由于此类副作用,因此建议使用var x = function(){}。例如:

var user = 'alien';
if( user == 'alien') {
    function salute () { console.log("Welcome to Earth!"); }
} else {
    function salute (){ console.log("Good day!"); }
}

salute()无论如何都会打印Good day!,即使它根本不是我们想要的。

答案 1 :(得分:2)

之前声明函数。

var initialiseTable = function () {
    console.log("hello world!!");
};
try {
    window.addEventListener("load", initialiseTable, false);
} catch(e) {
    window.onload = initialiseTable;
}

有关声明函数的更多信息,请阅读: var functionName = function() {} vs function functionName() {}

答案 2 :(得分:1)

因为你来自C#,所以区别很像:

class A {
    public int method2() {
        //I can call method1 even though it *declared* later below
        int a = method1(); 
    }

    public int method1() {

    }
}

VS

class B {
    public int method2() {
        bool a = method1(3); //I can't call it because it is *assigned* later below.
                         //In fact I cannot even compile it 
        Func<int, bool> method1 = x => x == 3;
    }
}

如果你看一下,你可能会注意到javascript的不同之处:

function a() {

}

任何地方都没有作业。

var a = function(){}一样,显然有赋值,它类似于后者的C#示例。

答案 3 :(得分:0)

只需将函数 initialiseTable 放到第一个位置,例如:

var initialiseTable = function (){ /*[...]*/ }

继续通话后。

答案 4 :(得分:0)

函数声明应始终在其调用之前。

在这一行: -

window.addEventListener("load", initialiseTable, false);

initialiseTable未知,所以应该在函数定义之后放置。 实际上,函数语句会导致其标识符在其执行的代码块*之前被绑定。函数声明在执行任何代码之前加载。它与以正常自上而下顺序评估的函数表达式不同。函数表达式仅在解释器到达该行代码时加载。所以如果你使用: -

var initialiseTable = function () {
    console.log("hello world!!");
};

它不起作用,但这有效: -

function initialiseTable() {
    console.log("hello world!!");};