var 是否因为存储在 var 中的 javascript 函数而成为函数
Does the var becomes a function because of a javascript function stored in a var?
在下面关于 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"
谢谢!
这行代码将运行函数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最强大的功能之一,因为它允许你做一些非常棘手的事情。
相关文章:
- 从var向代码隐藏函数传递值
- 如何将具有文本类型值的var放入jQuery函数中
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- javascript中对象构造函数中的var属性与this.properties
- 函数中this和var之间的区别
- JavaScript-的含义:var DndUpload=函数(inputElem){};
- 在jquery函数内部设置来自jquery函数的var;t运行
- 一个'var'在函数内部声明
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 如何知道函数的参数中传递的var名称
- 如何在函数内部为jquery工具提示调用不同的var字符串
- JS不工作:Sublime 3编辑器-Var main=函数()-=不是“”;激活“;(功能新手)
- “var”变量,“this”变量和“global”变量 - 在JavaScript构造函数中
- JavaScript 构造函数中的“var”变量会发生什么
- 未捕获的错误未定义不是函数 var ajax_url = $('#ajax_url').val();
- 在javascript中编写父函数var
- JavaScript中是否存在这种PHP语法?函数(var=null)
- 在Javascript函数Var中以echo格式获取数据
- 错误& # 39;美元.类型不是函数var obj = $.类型(pref);'在jqGrid中提交表单时
- 我如何分配一个var从传入函数var