ANSONMOUS FUNCTION -in- IF语句-inside- FOR循环 - 不工作!为什么?

时间:2016-06-27 19:40:55

标签: function if-statement for-loop call

我在stackoverflow上的第一篇文章!!!

我不确定为什么我的function()在for循环中的if(statment)中不起作用...

我理解它的方法。我可以在第一个匿名函数中添加一个var answer和console.log,但我想知道为什么函数不能正常工作......帮助!

我一直在学习bind,call,apply,并想创建这个例子来尝试它并偶然发现了这个问题。

var fruits = [];

var Fruit = function(name, color, quantity) {
    this.name = name;
    this.color = color;
    this.quantity = quantity;
};

addFruit = function(name, color, quantity) {
    fruits.push(new Fruit(name, color, quantity));
}

// filled fruits[] with objects.
addFruit("strawberry", "red", 20);
addFruit("watermelon", "green", 5);
addFruit("orange", "orange", 10);

// trying to console.log "an" instead of "a" because it preceeds "orange"
var greet = function() {
    var vowels = "aeiou";
    for (var i = 0; i < vowels.length; i++) {
        if (this.name.charAt(0) === vowels.charAt(i)) {
  // here is where this function does not work...
            function() {
                console.log("I am an " + this.name);
            };
            break;
        }
        else {
            function() {console.log("I am a " + this.name)}
        }
    }
}

greet.call(fruits[2])

1 个答案:

答案 0 :(得分:0)

您定义一个函数:

function() {
    console.log("I am an " + this.name);
};

但你永远不会调用这个功能。由于它是匿名的,因此在定义之后你无法引用它。因此,您必须直接在该定义中调用它:

(function() {
    console.log("I am an " + this.name);
})();

这有点愚蠢,因为函数只是对事物做了然后超出了范围。你也可以直接做一件事:

console.log("I am an " + this.name);

根本不需要匿名或其他功能。