老师这样写错在哪里?

老师这样写错在哪里?

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

</head>

<body>

<script>

function test(){

if(arguments.length==0)return console.log("无参数");

for(var i=0;i<arguments.length;i++){

var mins=0;

if(mins<=arguments[i]){

mins=mins;

}else{

mins=arguments[i];

}

}

return mins;

}

var datas=[2,4,1,-1,56,3,-7,-8,0];

console.log(test.apply(window,datas));

</script>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕久久 2020-07-01 09:16:15

同学你好,“赋不赋值都会预解析”这句理解是对的,只是当有赋值的时候,变量声明会提前,但是赋值会保留在原地(代码中var mins=0;是写在for循环中的),如下:

http://img1.sycdn.imooc.com//climg/5efbe3780968d7de06730303.jpg

所以每一次for循环,都会执行mins=0,即给mins赋值为0。

当没有赋值时,形式如下:

http://img1.sycdn.imooc.com//climg/5efbe3d909d80e3310330521.jpg

所以for循环中,不会再执行“ var mins”这句了,mins可以保存上几次的运算结果。

祝学习愉快!

好帮手慕久久 2020-06-30 09:11:48

同学你好,很抱歉,老师遗漏了该点,可以将最小值设置成参数的第一项,如下:http://img1.sycdn.imooc.com//climg/5efa91440904f4ac06450479.jpg

祝学习愉快!

好帮手慕久久 2020-06-29 19:20:21

同学你好,问题解答如下:

当设置mins=0时,在for循环中,每次循环都会为mins设置初始值为0,无法保存上一次判断的结果,所以test最终返回的结果就是0与参数的最后一项的判断结果,如果0小于最后一项,就返回0,0大于最后一项,就返回最后一项。

当不给mins设置初始值时,由于预解析,“ var mins”这句代码会被提前:

当i=0时,此时不会执行“ var mins”了(已经被提前),会直接进行判断,由于mins没有初始值,满足else的条件,所以执行else中的语句,此时mins=2(等于参数的第一个)

当i=1时,由于2<4,所以重新给mins赋值为mins(自己等自己),即mins还等于2。

当i=2时,此时2<1,执行else语句,给mins赋值为当前参数,即mins=1。

依次类推,最终得到了最小值。

这样实现,思路略微有点复杂,可做如下修改:

http://img1.sycdn.imooc.com//climg/5ef9ce22095b3ac111460628.jpg

另外当参数长度为0时,页面会打印如下:

http://img1.sycdn.imooc.com//climg/5ef9ce5f0917253213810314.jpg

所以继续修改如下:

http://img1.sycdn.imooc.com//climg/5ef9ce6509b2ddc308740754.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

  • 提问者 慕标5156652 #1
    老师我觉得你这样写也有问题啊 如果我传入的是[2,12,34]也就是全是正数 返回的就是0 没有起到返回最小值的作用
    2020-06-29 20:39:27
  • 提问者 慕标5156652 #2
    我var 在循环之前 为啥每次循环还会重新给 mins=0; 下面这个不是很懂 不是赋不赋值都会预解析吗?为什么当i=0时就不会执行var mins? 当不给mins设置初始值时,由于预解析,“ var mins”这句代码会被提前: 当i=0时,此时不会执行“ var mins”了(已经被提前),会直接进行判断,
    2020-07-01 00:11:05
提问者 慕标5156652 2020-06-29 18:37:08

我知道了 不应该开始给mins赋值

应该这样赋值 var min

老师是这样吗



  • 提问者 慕标5156652 #1
    但是我觉得有点逻辑不通 var mins; if(mins<=arguments[i]){ mins=mins; }else{ mins=arguments[i]; } 这一段代码有问题
    2020-06-29 18:39:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师