var 是否因为存储在 var 中的 javascript 函数而成为函数

Does the var becomes a function because of a javascript function stored in a var?

本文关键字:函数 var javascript 中的 是否 因为 存储      更新时间:2023-09-26

在下面关于 Scope 的示例中,我不明白变量如何作为函数运行? 在这里var ff()运行。但是,这是在 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"

谢谢!

这行代码将运行函数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();

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

函数是 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最强大的功能之一,因为它允许你做一些非常棘手的事情。