var funcHi = function() {
var a=6;
var b=5;
return a+b;
};
var withBrace = funcHi();
var withoutBrace = funcHi;
console.log("With braces: "+withBrace) //'Reference 1'
console.log("Without braces: "+withoutBrace) //'Reference 2'
console.log("Without braces: "+withoutBrace()) //'Reference 3'
代码非常简单明了。对于“参考1”和“参考3”,控制台将显示11,但我不清楚我们在哪里使用“参考2”。对于'参考2',控制台将只显示完整的功能而不是显示11.很多时候,我们使用'参考2'的东西(例如window.onload = initAll),但它是如何有用的。
window.onload = initAll; //What does it actually do? Why not 'window.onload = initAll()'
我不清楚它背后的概念。 如果可能的话,有人可以给我一些关于这件事的好教训的链接吗?
答案 0 :(得分:1)
在第一种情况下:withBrace
包含调用funcHi
的结果,因此它是11
在第二种情况下:withoutBrace
引用函数funcHi
。因此withoutBrace === funcHi
,您可以说withoutBrace
是一个函数,与funcHi
的函数相同。您可以通过funcHi
通过withoutBrace
调用函数withoutBrace()
并获取11
- 这是第三种情况。
var funcHi = function() {
var a=6;
var b=5;
return a+b;
};
//assigning the result of calling funcHi to withBrace
var withBrace = funcHi();
typeof funcHi; //function
typeof withBrace; //number
withBrace === 11 //true, withBrace is 11, a result of calling funcHi
//assigning funcHi to withoutBrace
var withoutBrace = funcHi;
typeof funcHi; //function
typeof withoutBrace; //function
withoutBrace === funcHi; //true, they are the same function
funcHi(); //11
withoutBrace(); //11, they return the same thing since withoutBrace points to funcHi
答案 1 :(得分:1)
var withBrace = funcHi();
在这种情况下,withBrace
将是funcHi
的结果。这意味着:
console.log(withBrace);
// 11
var withoutBrace = funcHi;
在这种情况下,withoutBrace
是对函数funcHi
的引用。这意味着:
console.log(withoutBrace);
// function () { var a=6; var b=5; return a+b; }
所以,你可以调用它:
console.log(withoutBrace());
// 11
当您编写类似window.onload = f;
的内容时,它是一个事件,函数f
将被执行
每当onload
window
事件被触发时。因此,函数f
将自动触发
没有你的订单,它会在浏览器决定时触发(在这种情况下它完全加载时)。
这意味着您必须为onload
编写一个函数:
window.onload = function () {
// do something
};
但你永远不会自己执行这个功能。
答案 2 :(得分:0)
funcHi
是函数本身的引用。
如果你想传递一个函数(例如,将它作为处理程序添加到事件中),你可以这样做。
如果您想调用该函数并获得其结果,则只添加括号。