Javascript中的错误/警告:循环内的函数

Javascript中的错误/警告:循环内的函数,javascript,function,function-expression,Javascript,Function,Function Expression,我是JavaScript新手,从在线教程中学习。当前表达式是关于函数表达式的使用,特别是从函数内部返回函数表达式 代码如下: //array of all available rides, with respective wait times var parkRides = [["Birch Bumpers", 40], ["Pines Plunge", 55], ["Cedar Coaster", 20], ["Ferris Wheel of Firs", 90]]; //array of

我是JavaScript新手,从在线教程中学习。当前表达式是关于函数表达式的使用,特别是从函数内部返回函数表达式

代码如下:

//array of all available rides, with respective wait times
var parkRides = [["Birch Bumpers", 40], ["Pines Plunge", 55], ["Cedar Coaster", 20], ["Ferris Wheel of Firs", 90]];

//array of fast pass rides, indicating next up ride
var fastPassQueue = ["Cedar Coaster", "Pines Plunge", "Birch Bumpers", "Pines Plunge"];

//function to build fast pass queue using array
function buildTicket(allRides, passRides, pick) {

    //if user has picked the first ride in fast pass queue, alert so...
    if(pick == passRides[0]) {

        //remove first item from queue using shift and store it in a var
        var pass = passRides.shift();

        //return function expression here
        return function () {
            alert("QuicK!! You've got a fast pass to " + pass + "!");
        };  //return ends with a ;

    }

    else {
        for (var i = 0; i < allRides.length; i++) {
            if(pick == allRides[i][0]) {

                //return a function expression here
                return function () {
                    alert("A ticket is printing for " + allRides[i][0] +"!\n"+ " Your wait time is about " + allRides[i][1] + " minutes.");
                };
            }

        }
    }

}

//use function buildticket
var wantsRide = "Pines Plunge";

var ticket = buildTicket(parkRides, fastPassQueue, wantsRide);

//execute function expression by calling ticket()
ticket();


这里有什么问题吗?我知道这是
for
循环中的函数表达式,但为什么会生成警告?是因为
if(pick==allRides[i][0])
语句可能永远不会为真,所以函数表达式永远不会执行吗?

这有点像是瞎猜,但可能是MSV无法理解您的函数返回的是什么(即另一个函数)

这个问题可能会对这个问题有所帮助:

(或者我可能是找错了方向)

因此,如果您将返回值定义为“function”类型的变量,并在以后适当地重新定义它,那么它在MSV中可能会工作得更好。 比如:

//function to build fast pass queue using array
function buildTicket(allRides, passRides, pick) {

    var func = new function() {}

    //if user has picked the first ride in fast pass queue, alert so...
    if(pick == passRides[0]) {

        //remove first item from queue using shift and store it in a var
        var pass = passRides.shift();

        func = function () {
            alert("QuicK!! You've got a fast pass to " + pass + "!");
        };  //return ends with a ;
        //return function expression here
        return func;

    }

    else {
        for (var i = 0; i < allRides.length; i++) {
            if(pick == allRides[i][0]) {

                func = function () {
                    alert("A ticket is printing for " + allRides[i][0] +"!\n"+ " Your wait time is about " + allRides[i][1] + " minutes.");
                };
                //return a function expression here
                return func;
            }

        }
    }

}
//使用数组构建快速传递队列的函数
功能构建票证(所有乘车、乘车、提货){
var func=新函数(){}
//如果用户在快速通行队列中选择了第一辆车,请发出警报,以便。。。
if(pick==passRides[0]){
//使用shift从队列中删除第一项并将其存储在var中
var pass=passRides.shift();
func=函数(){
提醒(“快!!你有一个快速通过“+通过+”!”);
};//返回以一个字母结尾;
//此处返回函数表达式
返回函数;
}
否则{
对于(var i=0;i

虽然这并不能解释为什么MSV抱怨第二次回访而不是第一次回访(或两者都抱怨),所以我可能完全错了(我没有或使用MSV)。

这是一个警告,说明您的代码可能存在此处描述的问题:但在这种情况下,它没有问题,因为它在创建函数时也会返回循环。@Barmar-您使用的linter不够聪明,无法确定它。@Quentin这是一种很难从静态分析中确定的东西。
//function to build fast pass queue using array
function buildTicket(allRides, passRides, pick) {

    var func = new function() {}

    //if user has picked the first ride in fast pass queue, alert so...
    if(pick == passRides[0]) {

        //remove first item from queue using shift and store it in a var
        var pass = passRides.shift();

        func = function () {
            alert("QuicK!! You've got a fast pass to " + pass + "!");
        };  //return ends with a ;
        //return function expression here
        return func;

    }

    else {
        for (var i = 0; i < allRides.length; i++) {
            if(pick == allRides[i][0]) {

                func = function () {
                    alert("A ticket is printing for " + allRides[i][0] +"!\n"+ " Your wait time is about " + allRides[i][1] + " minutes.");
                };
                //return a function expression here
                return func;
            }

        }
    }

}