1
 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”。对于“reference 2”,控制台将简单地显示完整的功能而不是显示 11。很多时候,我们使用“reference 2”的东西(例如 window.onload = initAll),但它有什么用处。

window.onload = initAll;  //What does it actually do? Why not 'window.onload = initAll()'

我不清楚它背后的概念。如果可能的话,有人能给我一个关于这件事的好课的链接吗?

4

3 回答 3

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

窗口.onload = f;

当您编写类似window.onload = f;的内容时,它是一个事件,只要触发了 的事件,f就会执行该函数。因此,该功能将在没有您的命令的情况下自动触发 ,它会在浏览器决定时触发(在这种情况下完全加载时)。onloadwindowf

这意味着您必须为 编写一个函数onload

window.onload = function () {
    // do something
};

但是您永远不会自己执行此功能。

于 2013-05-19T04:39:54.863 回答
1

在第一种情况下withBrace包含调用的结果funcHi,因此它是11

第二种情况withoutBrace引用函数funcHi。因此withoutBrace === funcHi,您可以说withoutBrace是一个函数,与 相同的函数funcHifuncHi您可以通过withoutBracedoingwithoutBrace()和get调用该函数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
于 2013-05-19T04:27:14.357 回答
0

funcHi是对函数本身的引用。

如果您想传递一个函数(例如,将其作为处理程序添加到事件中),您可以这样做。

如果你想调用函数并得到它的结果,你只需要添加括号。

于 2013-05-19T04:27:20.590 回答