我是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
)与第二个不相似(在功能时直接输出)叫做)?是否有第一个解决方案?
答案 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