Javascript 为什么window.addEventListener不工作?

Javascript 为什么window.addEventListener不工作?,javascript,Javascript,在window.onload事件中,我希望调用一个函数。 如果我按照下面给出的方式定义它,则不会调用该函数 try { window.addEventListener("load", initialiseTable, false); } catch(e) { window.onload = initialiseTable; } var initialiseTable = function () { console.log("hello world!!"); }; 但是

在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!!");};

它可以工作,有什么想法吗?

先声明函数

var initialiseTable = function () {
    console.log("hello world!!");
};
try {
    window.addEventListener("load", initialiseTable, false);
} catch(e) {
    window.onload = initialiseTable;
}
有关声明函数的详细信息,请阅读以下内容:

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

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

继续调用后。

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

在这一行:-

window.addEventListener("load", initialiseTable, false);
initialiseTable未知,因此应将其放在函数定义之后。 实际上,函数语句导致在执行其代码块*中的任何内容之前绑定其标识符。函数声明在执行任何代码之前加载。它不同于按正常自上而下顺序计算的函数表达式。函数表达式仅在解释器到达该代码行时加载。因此,如果您使用:-

var initialiseTable = function () {
    console.log("hello world!!");
};
它不起作用,但它起作用了:-

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

当您使用
var x=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!"); }
}
sallet()
将打印
早安不管怎么说,即使这根本不是我们想要的。

因为你来自C#,区别很大:

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

    public int method1() {

    }
}
vs

任何地方都没有任务


其中,与
var a=function(){}
一样,显然存在赋值,这与后一个C#示例类似。

我想说的是执行顺序问题,因为
initialiseTable
用于之前的声明查看此处的后期注释,但这就是为什么您应该提供信息而不是链接到它。那个developer.mozilla.org链接已经不好了,不知道它以前说什么了。你是明星,谢谢<代码>加载
即使使用函数声明也无法工作。我使用的是jQuery,所以将代码替换为`$(window).on('load',function(){loadMethod();});它成功了。
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;
    }
}
function a() {

}