javascript函数有什么用途来修复另一个函数

时间:2015-05-27 10:00:23

标签: javascript jquery

我看到这么多功能:

form.prototype.smokerDisabled = function(){
  return function(age) {
    return age>=15 ? 'disabled="disabled"' : '';
  };
};

将实际代码保存在另一个函数中并使其恢复的用途是什么。相反它本来是写的:

form.prototype.smokerDisabled = function(age){
  return age>=15 ? 'disabled="disabled"' : '';
};

请告诉我第一种方法的区别和用法。感谢。

7 个答案:

答案 0 :(得分:5)

在这种情况下,我不认为你有任何理由这样做。您通常会看到类似返回函数的原因是导致closure捕获外部变量的状态。

答案 1 :(得分:4)

在这种特殊情况下,你在w.r.t的第一个版本中没有任何优势。第二个。

但是在很多情况下它可能会有用。 你可以做的是使用闭包来存储数据。

让我们稍微修改你的例子。 让我们创建一个可自定义的阈值

if (filter(user.age,15)) { ... }

所以你可以做到

UIImageView

相反,你应该做

...sizeForItemAtIndexPath...

等等

- layoutIfNeeded

如果你想避免在每次必须过滤时重复15,或者你希望能够更改过滤器实现而不需要更新对过滤器函数的每次调用,这会有所帮助。

您可以在此处找到其他示例。

http://www.bernaschina.com/en/blog/software/nodejs-code-reuse-right-way/

答案 2 :(得分:2)

全部取决于您的需求,第一个用于调用f.smokerDisabled()(15),第二个用f.smokerDisabled(15)调用。 它可能用于关闭。

第一个:

form.prototype.smokerDisabled = function(){
  return function(age) {
    return age>=15 ? 'disabled="disabled"' : '';
  };
};

var f = new form();
f.smokerDisabled()(15); // returns : disabled="disabled"

第二个:

form.prototype.smokerDisabled = function(age){
  return age>=15 ? 'disabled="disabled"' : '';
};

var f = new form();
f.smokerDisabled(15); // returns : disabled="disabled"

答案 3 :(得分:1)

当返回一个函数时,它被称为闭包。当您使用私有变量时,这将非常有用。所以,在你的例子中,说你的代码是这样的:

form.prototype.smokerDisabled = function(){
  var smoker = this.needsSmoke;
  return function(age) {
    return age>=15 && smoker ? 'disabled="disabled"' : '';
  };
};

这意味着,smoker变量将不可用于其他变量。在这种情况下,可能很难看到它背后的逻辑,但想象你有一个猜数字游戏。

function guesser(){
  var number = Math.floor(Math.random()*10) + 1;
  return function(guess){
      return guess === number ? "You got it!, it was " + number : "Failed - guess again";
  }
}

所以,现在你可以做到:

var round1 = guesser();
round1(3); // "Failed - guess again"
round1(5); // "You got it!, it was 5"

var round2 = guesser();
round2(5); // "Failed - guess again"

guesser()的每次新来电都会在1-10之间创建一个新的随机数,您无法从外部访问(即:您可以作弊!)。

答案 4 :(得分:1)

在你的代码中,它实际上没有任何可能实现的东西,但有了这个:

form.prototype.smokerDisabled = function(minAge){
    return function(age) {
        return age >= minAge ? 'disabled="disabled"' : '';
    };
};

您可以使用第一个函数的参数来生成另一个函数。

在函数中生成函数是$group的基础。

使用函数的参数生成另一个函数是调用 currying

答案 5 :(得分:1)

你的问题:

将实际代码保存在另一个函数中并使其恢复的用途是什么?

在评论和答案中,您已经建议在您的具体示例中不需要这样做。

但是如果你在外部函数的范围内有一个内部函数,那么你必须返回它才能得到它的结果。

我的意思是,如果删除内部函数的form.prototype.smokerDisabled = function(){ function(age) { // removed the return here return age>=15 ? 'disabled="disabled"' : ''; }; }; ,请说这个函数不起作用:

smokerDisabled

所以如果你调用Uri simUri = Uri.parse("content://icc/adn"); Cursor cursorSim = this.getContentResolver().query(simUri, null, null,null, null); while (cursorSim.moveToNext()) { listName. add(cursorSim.getString(cursorSim.getColumnIndex("name"))); listContactId. add(cursorSim.getString(cursorSim.getColumnIndex("_id"))); listMobileNo. add(cursorSim.getString(cursorSim.getColumnIndex("number"))); } 方法它就不会返回任何东西,因为它有一个内部函数,它返回的结果不是外部函数。

因此,如果你在外部函数中已经使用了内部函数,则必须返回返回某些操作结果的内部函数。

答案 6 :(得分:-2)

谷歌搜索后:

它叫做封闭。

基本上,其他函数中定义的函数只能在此函数中访问。但是可以作为结果传递,然后可以调用此结果。

这是非常强大的功能。你可以在这里看到更多解释:

http://web.archive.org/web/20120101221030/http://blog.morrisjohns.com/javascript_closures_for_dummies.html

希望这有助于解释它