在下面关于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"
谢谢!
答案 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)
一般的脚本语言和函数式编程。您可以像使用变量一样使用函数。例如:在两种范例中,通常(不知道任何语言没有)函数可以作为参数等传递......