指定一个函数(带参数)一个变量名? [JavaScript]
我决定教我自己的函数式编程。指定一个函数(带参数)一个变量名? [JavaScript]
我已经提交了所有的作业,同时保持了函数式编程的规则,而且我的教师对它完全没问题。为了抢投入,我一直在做这样的事情:
var getWidth = function(){
return prompt("What is the width?");
};
这工作得很好,但它可能是简单的东西,比如:
var getWidth = prompt("What is the Width?");
这样做的问题是,当我调用该函数getWidth()
,它只运行一次函数并将其分配给getWidth
变量。但这不是我想要的,我希望它每次调用getWidth()
时都会运行prompt("What is the Width?")
。我试图搜索它,但我并不完全知道如何对它进行描述。如果你知道如何使用它,Google很有用。
OP可能在寻找什么,是lambda功能简写。这是一个非常简单的代码,让你正确的功能更短。它通常用于匿名函数,但它很容易在这里重新使用。例如:
function getWidth(){
return prompt("What is the width?");
}
将减少到:
var getWidth() =() => prompt("What is the width?");
注意提示的值会自动恢复,所以你不需要添加return
到您的代码。如果需要的话
参数也可以指定,像这样:
var getWidth = (x) => prompt(x);
如果你使用参数这种方式,那么()
是可选的。这也可以工作:
var getWidth() = x => prompt(x);
它可能是简单的东西,比如:
你不能 “简化” 的功能
var a = function onePlusTwo() {
return 1 + 2;
};
写
var a = 1 + 2;
两个做完全不同的事情。
第一限定的函数(意思是,确实不执行它),并分配功能给变量a
。该函数然后可以用a()
叫,这将评估到3
,因为这是该函数的返回值:
alert(a() * 2) // 6
第二(var a = 1 + 2;
)只是执行你的身体有码功能。执行它将1 + 2
的结果分配给变量a。只有通过在程序中的其他地方复制和粘贴,此代码才能“重复使用”。
所以,如果你想定义功能并重新使用它,你别无选择,只能将它定义为一个函数。这就是功能!
如果您想使用另一个函数,稍后可以使用该函数调用该函数,无论有无参数,则如另一个答案中所述,可以使用bind
,如var a = prompt.bind(window, "What is the width?");
,然后调用它与a()
。但是,这和在第一个例子中编写函数的方式基本相同,并且可读性稍差。
顺便说一下,这些都不是“函数式编程”。函数式编程并不意味着仅仅使用函数;所有的程序都这样做。函数式编程是指涉及操纵,组合,动态创建和传递函数的编程风格。
Okey dokey。谢谢。现在我想到了,只要将getWidth设置为一个字符串并将其传递给提示符就可以正常工作。我知道这不是功能,那主要是背景。尽管动态创建对我来说是新生事物,但我已经做了很多操作。我得看看它。 – Ucenna
这样你就不能简化你的功能。通过第一种方法:
var getWidth = function(){
return prompt("What is the width?");
};
您正在返回一个可执行函数,并将函数引用分配给一个变量getWidth。但在第二个中:
var getWidth = prompt("What is the Width?");
您正在返回函数window.prompt的结果。
这就是*定义*函数和*调用函数的区别。 – Barmar
结帐这个答案。这可能有一些帮助。 [你可以在声明它后修改一个Javascript函数吗?](http://stackoverflow.com/questions/2136522/can-you-alter-a-javascript-function-after-declaring-it) –
那么,在函数式编程中纯函数不会有太大区别,但**'prompt'不是纯粹的**。因此,您经常打电话或不打电话的频率很高。 – Bergi