为什么值会被添加但数组不会被推送?
我想,如果我在功能之后添加window.load
它就可以了。我得到它,当它最初解析时,函数不运行但是,这种情况我在窗口加载后很快调用该函数。
无论如何,为什么变量得到的值而不是数组?我真的以愚蠢的方式使用window.load
吗?在这里学习。
window.load = foo(); //works if I declare this after the function
var barr = [],
max, min;
function foo() {
var a = 10,
b = 30;
barr.push("asfd");
min = Math.min(a, b);
max = Math.max(a, b);
console.log(barr); // IDK what does this log, DevTool just throws error straight away
};
console.log(barr); // logs empty array [] as initially declared
console.log(min); // logs 10 on global scope
console.log(max); // logs 30 on global scope
答案 0 :(得分:3)
将window.onload = foo();
更改为
window.onload = foo;
通过使用foo()
,此处将立即调用该函数并将返回的值分配给onload
回调。因此,在声明任何变量foo
之前,会调用它。当您使用foo
为onload
事件分配函数时,会传递foo
的函数引用。
此外,我建议您使用DOMContentLoaded
事件代替onload
,因为onload
将在页面上的所有资源完全加载时触发,这将花费太长时间。
在引用函数之前定义函数被认为是一种很好的做法。随着函数声明(function fnName()
)被提升到顶部,它将起作用。但是如果使用函数表达式语法(var fnName = function() {...
)创建函数,则会抛出错误。
var barr = [],
max, min;
function foo() {
var a = 10,
b = 30;
barr.push("asfd");
min = Math.min(a, b);
max = Math.max(a, b);
console.log(barr); // ["asfd"]
};
window.onload = foo;
// document.addEventListener('DOMContentLoaded', foo, false);
console.log(barr); // logs empty array [] as initially declared
console.log(min); // logs undefined
console.log(max); // logs undefined
此处需要注意的另一件事是变量min
和max
将为undefined
,因为它们未分配值。如果在执行foo
后记录它们,它们将记录正确的值。