由于存储在var中的javascript函数,var是否成为函数?

时间:2013-09-05 18:41:47

标签: javascript jquery scope

在下面关于Scope的示例中,我不明白变量如何作为函数运行?此处var f正在f()运行。但是,这是在JavaScript中运行f的合理方法吗?为什么?是因为var f存储了一个函数吗?

var myFunction = function() {
  var foo = "hello";
  var myFn = function() {
    console.log( foo );
  };
  foo = "ddd";
  return myFn;
};
var f = myFunction();
f(); // "ddd"

谢谢!

3 个答案:

答案 0 :(得分:0)

这行代码将运行函数myFunction并将其返回值赋给f。

var f = myFunction();

myFunction返回对函数myFn的引用。因此,f现在是对myFn的引用,当您尝试使用f致电f()时,它会调用myFn,因为这是参考点的位置。

jsFiddle Demo

有一种类似的方法可以返回带有函数的对象

var init = function(){
 return {
  hello: function(){ console.log("hello"); },
  world: function(){ console.log("world"); }
 };
};

然后可以这样使用:

var f = init();
f.hello();
f.world();

答案 1 :(得分:0)

函数是javascript中的对象,因此可以将它们分配给变量并像任何其他值一样传递。最终他们可以被执行。

这里发生的是myFunction 返回一个函数,当然可以执行该函数。

让我简化你的例子:

// function that returns a function.
var foo = function() {

  // declare a function, but don't run it right now.
  var fn = function() {
    return "bar";
  };

  // return the function object.
  return fn;
}

var someFn = foo(); // function object is returned from foo()
someFn();           // "bar" is returned

// Which means you could also do this!
// the first () executes foo, second () executes the function returned by foo()
foo()()             // "bar" is returned

在此示例中,foo()返回一个函数。此函数保存到局部变量someFn,然后执行。

返回函数的函数有时会让你不知所措,但它是javascript最强大的功能之一,因为它允许你做一些非常棘手的事情。

答案 2 :(得分:0)

一般的脚本语言和函数式编程。您可以像使用变量一样使用函数。例如:在两种范例中,通常(不知道任何语言没有)函数可以作为参数等传递......