Javascript函数:var func = someFunction()和var func = someFunction?

时间:2013-05-19 04:24:46

标签: javascript function

 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()'

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

3 个答案:

答案 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)

案例1

var withBrace = funcHi();

在这种情况下,withBrace将是funcHi的结果。这意味着:

console.log(withBrace);
// 11

案例2

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;

当您编写类似window.onload = f;的内容时,它是一个事件,函数f将被执行 每当onload window事件被触发时。因此,函数f将自动触发 没有你的订单,它会在浏览器决定时触发(在这种情况下它完全加载时)。

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

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

但你永远不会自己执行这个功能。

答案 2 :(得分:0)

funcHi是函数本身的引用

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

如果您想调用该函数并获得其结果,则只添加括号。