代码仅在未包装在函数中时有效

时间:2018-11-02 14:27:05

标签: javascript

真的不确定JavaScript是怎么回事,但是即使阅读了类似Simple function returning 'undefined' value这样的其他文章,实际上也无法弄清楚。由于某种原因,当我将代码放置在函数中时,它将返回“ undefined”,而不是true或false。

如果我使用不带函数的代码并在第一行定义var a,则可以正常工作:

var a = "wjebh ghbui ayub";
var b = (a.split(' ').join('')).split('a'); // creates array

var trueOrFalse = b.map(function(c, i){ // puts into array true/false for each index
    if (c[2] == 'b') {
        console.log('value: ' + c[2] + ' is b; true');
        return true;
    } else {
        console.log('false');
        return false;
    }
});

var answer = function(el) {
    // checks whether any element is true
    return el === true;
};
trueOrFalse.some(answer); // return true/false

但是当我将其添加到函数中时,它不起作用。

function bThreeAfterA(a) {
    var b = (a.split(' ').join('')).split('a'); // creates array

    var trueOrFalse = b.map(function(c, i){ // puts into array true/false for each index
        if (c[2] == 'b') {
            console.log('value: ' + c[2] + ' is b; true');
            return true;
        } else {
            console.log('false');
            return false;
        }
    });

    var answer = function(el) {
 // checks whether any element is true
        return el === true;     
    };

    trueOrFalse.some(answer); // return true/false
}

即使将其放入IIFE中,也无法正常工作:

(function(){
    var a = "wjebh ghbui ayub";
    var b = (a.split(' ').join('')).split('a'); // creates array

    var trueOrFalse = b.map(function(c, i){ // puts into array true/false for each index
        if (c[2] == 'b') {
            console.log('value: ' + c[2] + ' is b; true');
            return true;
        } else {
            console.log('false');
            return false;
        }
    });

    var answer = function(el) {
        // checks whether any element is true
        return el === true;
    };
    trueOrFalse.some(answer); // return true/false
})();

我觉得我在这里做的很愚蠢,大多数人都很容易发现。有人可以在这里解释我做错了什么吗?大概这是某种初学者语法错误。链接到任何阅读资源也将很有帮助。

1 个答案:

答案 0 :(得分:1)

我们都去过那里。

运行一下。

function bThreeAfterA(a) {
    var b = (a.split(' ').join('')).split('a'); // creates array

    var trueOrFalse = b.map(function(c, i){ // puts into array true/false for each index
        if (c[2] == 'b') {
            console.log('value: ' + c[2] + ' is b; true');
            return true;
        } else {
            console.log('false');
            return false;
        }
    });

    var answer = function(el) {
 // checks whether any element is true
        return el === true;     
    };

    return trueOrFalse.some(answer); //ACTUALLY return true/false
}

console.log("Answer: " + bThreeAfterA("wjebh ghbui ayub")); // Returns true. 

当您对块作用域之外的变量进行操作时,它们将持续存在。当它们进入内部时,它们消失了。

因此,它“起作用”,但是当您将其包含在函数中时却没有“起作用”。

相关问题