很简单,我现在想为什么有时你不需要调用运算符()来进行函数调用?
这就是我通常做的事情:
function startUp() {
alert("started");
}
// and later...
startUp(); //to call it, this will actually trigger the alert
//If I do this
startUp; //It prints the function in the a Browser's console, but won't call the function
现在,如果我将该功能附加到浏览器事件:
<script>
function startUp() {
alert("started");
}
window.onload = startUp; //I don't need the () to call the Function! WHY is that??
</script>
正如我在评论中提到的,为什么我有时不需要()来调用函数? (就像在这种情况下)
提前感谢您的解释。
答案 0 :(得分:3)
window.onload = startUp;
这不是你调用的功能。相反,您将对函数的引用作为窗口的onload事件的处理程序传递。触发事件时,将调用与其关联的所有处理程序(即执行该函数时)。
考虑以下代码:
function foo() {
console.log('I am fired');
}
function run(func){
func();
}
var bar = foo; // nothing is called on this line
run(bar); // bar is not called on this line. It is called in run().
run(foo); // same thing.
对于您的示例window.onload = startUp
,浏览器是触发回调的浏览器(与所有浏览器事件,超时回调等一样)。加载页面内容时,浏览器将调用startUp
函数(HTML,引用的CSS,引用的图像等)。
另外值得注意的是,可以使用参数调用该函数。浏览器事件通常调用它,this
是触发事件的元素(在这种情况下应该是窗口),第一个参数是触发的事件。如果你想复制它,它看起来像这样:
function fireCallbacks(element,callbacks){
var event = new Event();
for (var i=0; i<callbacks.length; i++) {
callbacks[i].call(element, event);
}
}
fireCallbacks(window, [startUp]);
Function.prototype.call
用于执行具有特定this
值和参数的函数。
答案 1 :(得分:1)
您没有在window.onload = startUp;
示例中调用函数,而是按名称将函数指定为onload事件的事件处理程序。
答案 2 :(得分:1)
您根本不会在第二种情况下调用该函数。相反,您的浏览器将处理window.onload
,类似于以下代码:
// call after document has been loaded
if(typeof(window.onload) === "function"){
window.onload();
}
正如您所看到的,window.onload
实际上已被调用,而自window.onload === startUp
以来,当文档完全加载时,您与startUp()
具有相同的效果。
答案 3 :(得分:1)
你没有打电话。加载页面时调用window.onLoad。你只是在改变启动时调用哪个函数(而不是自己调用它或者它会运行两次)。
答案 4 :(得分:1)
window.onload = startUp; //I don't need the () to call the Function! WHY is that??
因为你没有打电话。您只是设置对该功能的引用。
您的浏览器稍后会拨打window.onload()
。
答案 5 :(得分:0)
我花了一些时间来理解以下事实: javascript中的函数是对象。
作为这个概念的一个例子,我给你留下一些代码来玩
function fn1(obj) {
alert(obj&&obj.callerName?obj.callerName:'no caller');
}
h1 = fn1;// make a token out of a defined function
h1(); // and call the token
// make a token that holds an object that happens to be a function
fn2 = function () {
alert('I am a function that is saved into a token\nI am an object that can be called and passed around');
fn1(this);
}
// call it and pass it around
fn2();
// make an object that has a key that points to an object that happens to be a function
object1 = {
callerName : 'object',
fn3 : function IwillBeAttachedToAnObject() {
alert('what is the value of `this`?');
fn1(this);
}
}
h2 = object1.fn3;
h2(); // what should this give us
object.fn3 // compare to last call
// let's change the value of `this` inside this function...err, object
fn2.call(object1)
// let's add a new function to our object
object1.newFunction = fn1;
对于提交迟到感到抱歉,我的互联网刚刚上线而死了