在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!!");};
它有效,任何想法?
答案 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!!");};