当 for 循环中的 if 中有 return 时,为什么不能分配变量?

kaw*_*nah 0 javascript variables return

考虑一下:

\n

\r\n
\r\n
let arr = [\'hello\', \'hi\', \'ok\', \'this one\']\nlet varToAssign\n\nfunction assignTheVar() {\n    for(let i = 0; i < arr.length; i++) {\n    if(arr[i] == \'this one\') {\n        varToAssign = arr[i]\n      return\n    }\n    }\n  console.log(varToAssign)\n}\n\nwindow.addEventListener(\'load\', assignTheVar)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

该变量varToAssign不会被控制台记录。

\n

这是为什么?

\n

此问题的搜索结果

\n

在此输入图像描述

\n

但这有效:

\n

\r\n
\r\n
let arr = [\'hello\', \'hi\', \'ok\', \'this one\']\nlet varToAssign\n\nfunction assignTheVar() {\n    for(let i = 0; i < arr.length; i++) {\n    if(arr[i] == \'this one\') {\n        varToAssign = arr[i]\n    }\n    }\n  console.log(varToAssign)\n}\n\nwindow.addEventListener(\'load\', assignTheVar)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

我知道这是一个愚蠢的问题,但我正在努力在网上寻找答案,我不知道要搜索什么。

\n

为什么我不能在 for 循环中声明变量?

\n

并不是我正在寻找的......

\n

这是一种答案

\n

在 JavaScript 中从 for 循环返回值

\n
\n

return 语句立即退出函数,返回其后面的表达式的值。如果您在循环中使用 return 语句而没有某种条件,那么它将执行第一遍,然后退出。您需要将它们收集在一个变量中,并在循环后返回该变量。正如其他人所建议的,您可能希望将它们存储在数组中。\xe2\x80\x93\n无用代码\n2011 年 11 月 15 日 5:31

\n
\n

但这不就是我正在做的事情吗?它“执行”了第一遍,所以它不应该在“返回”之前返回值吗?

\n

Dav*_*ell 5

return语句立即从函数返回。因此,当您执行该 return 语句时,记录该值的代码不会被执行。

该变量确实被分配,只是没有记录,正如您通过执行下面代码片段的稍微修改的版本所看到的那样(我还修改了缩进,这可能使结构更清晰):

let arr = ['hello', 'hi', 'ok', 'this one']
let varToAssign

function assignTheVar() {
    for(let i = 0; i < arr.length; i++) {
        if(arr[i] == 'this one') {
            varToAssign = arr[i]
            console.log("before returning: " + varToAssign)
            return
        }
    }
    console.log(varToAssign)
}

window.addEventListener('load', assignTheVar)
Run Code Online (Sandbox Code Playgroud)