Javascript 全局变量不';t work-largestString(),它接受字符串数组作为输入,并返回该数组中最大的字符串 var-arr=[]; var最长=arr[0]; 函数最大字符串(arr) { for(变量i=0;i=longest.length) {longest=arr[i]} } 返回时间最长; } z=[“什么”、“现在”、“我”、“正在做”、“现在”] document.getElementById(“最长字符串”).innerHTML=largestString(z)

Javascript 全局变量不';t work-largestString(),它接受字符串数组作为输入,并返回该数组中最大的字符串 var-arr=[]; var最长=arr[0]; 函数最大字符串(arr) { for(变量i=0;i=longest.length) {longest=arr[i]} } 返回时间最长; } z=[“什么”、“现在”、“我”、“正在做”、“现在”] document.getElementById(“最长字符串”).innerHTML=largestString(z),javascript,Javascript,因此,当var longest=arr[0]在它工作的函数内部时,但当我将其带到外部时,它显示“longest not defined”。为什么呢?我认为,通过将其置于函数之外,变量“longest”可以自我更新 提前谢谢。当您将表达式var longest=arr[0]放入时在函数外部,arr指的是全局变量。其值设置为[],因此其第一项的值未定义 但是如果你把表达式var longest=arr[0]在范围内,arr引用参数,因此它将具有正确的值。@bran0的答案是正确的。我建议您可以编写v

因此,当var longest=arr[0]在它工作的函数内部时,但当我将其带到外部时,它显示“longest not defined”。为什么呢?我认为,通过将其置于函数之外,变量“longest”可以自我更新


提前谢谢。

当您将表达式
var longest=arr[0]放入时
在函数外部,
arr
指的是全局变量。其值设置为
[]
,因此其第一项的值未定义


但是如果你把表达式
var longest=arr[0]
在范围内,
arr
引用参数,因此它将具有正确的值。

@bran0的答案是正确的。我建议您可以编写
var longest=”“
而不是
var longest=arr[0]
,因为
arr
的长度可能为零,在这种情况下,
longest
将未定义

查找JavaScript作用域。我绝对不是这方面的专家,但这个搜索词应该通过谷歌提供相关信息。谢谢。我查了一下,下面是我的猜测:通过将它放在函数外部,它将成为一个全局变量,并覆盖函数内部的“最长”。你觉得合理吗?谢谢。还有一个问题:当我把两个变量都放进去时,它会返回“what”而不是“do”。我如何知道我指的是哪个变量或参数?有规则吗?当有多个同名变量时,它总是引用最局部的变量。你是把变量放在函数里还是放在for语句里?好的,让我考虑一下。我把变量放在函数里面,我不知道为什么它会返回“what”。我在我这边测试过,但不是那样的。顺便说一下,我强烈建议使用let或const而不是var。好的,谢谢!到目前为止,我还没有学会let和const,但我会研究它们。再次感谢!这也很有用。非常感谢。非常感谢。还有一个问题:如果我在for语句中写return语句,会发生什么情况?@jianyuxin,如果你这样做,那就错了。函数将返回遇到的第一个项,无论其长度如何。我明白了。谢谢你的回复!
 <p id="longeststring">
</p>
  <script>

  var arr=[];
  var longest=arr[0];

  function largestString(arr)
  {
   for (var i=0;i<arr.length;i++)
       {if(arr[i].length>=longest.length)
          {longest=arr[i]}


       }
   return longest;

  }
  z=["what","am","I","doing","now"]
  document.getElementById("longeststring").innerHTML=largestString(z)
</script>