与直接函数调用相比,使用return语句不起作用

时间:2016-07-03 08:39:48

标签: javascript loops scope return

我是JavaScript的新手。由于我刚刚制作了这两个样本,我正在挠头。

function main() {
    var arr = [];
    for(var i=1; i<=10; i++) {
        var x = arr.push(i);
        return x;
    }
}

console.log(main());

VS

function main() {
    var arr = [];
    for(var i=1; i<=10; i++) {
        var x = arr.push(i);
        console.log(x);
    }
}

main();

第二个在控制台中输出1-10,但第一个输出仅为1.为什么第一个(使用return)与第二个不相似(在功能时直接输出)叫做)?是否有第一个解决方案?

2 个答案:

答案 0 :(得分:0)

以下是您的代码中发生的事情:

function main() {
var arr = [];
for(var i=1; i<=10; i++) {
    var x = arr.push(i);
    return x;
}
}

console.log(main());

不仅在JS中,而且在所有基于C语言的编程语言中,关键字return都存在于当前的函数调用中。所以这里发生的是你进入函数,i变为1然后返回你明确告诉函数停止并显示i的当前值。

在第二个版本中,你只需要console.log()你想要写的变量,并且不会以任何方式干扰函数,让它运行直到for循环通过。

您可以了解有关此行为的更多信息here

答案 1 :(得分:0)

因为它退出了return语句中的函数。

但是如果你在最后添加回报,它将返回一个数组。

 if (!navigator.serviceWorker || !navigator.serviceWorker.register) {
        console.log("This browser doesn't support service workers");
        return;
    }

    // Listen to messages from service workers.
    navigator.serviceWorker.addEventListener('message', function(event) {
        console.log("Got reply from service worker: " + event.data);
    });

    // Are we being controlled?
    if (navigator.serviceWorker.controller) {
        // Yes, send our controller a message.
        console.log("Sending 'hi' to controller");
        navigator.serviceWorker.controller.postMessage("hi");
    } else {
        // No, register a service worker to control pages like us.
        // Note that it won't control this instance of this page, it only takes effect
        // for pages in its scope loaded *after* it's installed.
        navigator.serviceWorker.register("service-worker.js")
            .then(function(registration) {
                console.log("Service worker registered, scope: " + registration.scope);
                console.log("Refresh the page to talk to it.");
                // If we want to, we might do `location.reload();` so that we'd be controlled by it
            })
            .catch(function(error) {
                console.log("Service worker registration failed: " + error.message);
            });
    }

function main() { var arr = []; for(var i=1; i<=10; i++) { arr.push(i); } return arr; } console.log(main()); 仅在x

之后保存了数组的长度