0

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

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

谢谢!

4

3 回答 3

0

In scripting languages in general and functional programming. You can use functions as you would a variable. For example: in both paradigms typically(not aware of any languages that don't) functions can be passed as parameters, etc...

于 2013-09-05T18:48:49.810 回答
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();
于 2013-09-05T18:45:37.287 回答
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 最强大的功能之一,因为它允许你做一些非常棘手的事情。

于 2013-09-05T18:45:52.223 回答