老师,变量input的位置(三种写法)有什么不同,其中第一个写法会导致浏览器崩溃,是什么原因呢?日常开发中推荐哪一种写法呢

老师,变量input的位置(三种写法)有什么不同,其中第一个写法会导致浏览器崩溃,是什么原因呢?日常开发中推荐哪一种写法呢

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

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

3回答
宝慕林6548283 2022-02-10 11:56:47

老师,问:第2种,是先问:当input不等于“退出”时,才做循环体里的东西,可那时还没定义input,为什么不出错呢??????????????????????????????????????????????????????????????????????????????????????????????????

  • 淤白 #1

    input这个问题是不是因为变量声明提升的特性,它才不会报错的,先使用后定义这个操作正好就是变量声明提升的性质

    2022-05-22 15:58:10
qq_慕瓜8501172 2022-02-05 19:18:20

第一种出错的原因是:while循环中没有 var input=prompt("请输入工资"); 这句代码,所以自从进入while循环后,你的input就没有被更新;一旦input以不等于"退出"的值进入while循环后,就会出现while死循环。

措施:在其他代码不变的前提下,在该行代码https://img1.sycdn.imooc.com//climg/61fe5c3f09b4210103200036.jpg后面添加一句var input=prompt("请输入工资");,并且将length-1那行删掉 即可。


好帮手慕小李 2022-02-05 11:07:47

同学你好,第一种方式导致浏览器崩溃的原因是当页面加载完成后,当我们操作prompt时,while循环就不停的遍历才导致的类似“死循环”的情况发生,如把prompt放到while中,每次输入后都会重新弹出prompt,相当于js停止等待的状态,这时候循环状态是停止的所以不会出现问题。第二第三种写法都ok这个选择因人而异,在正式开发中只要是保证能实现效果为主,如果说硬是分出一个的话,我个人偏向第三种,因为这样更符合编程的思想,比如先有然后再进行操作。同学如写第二个没问题,基本上前端开发工程师都能看懂。祝学习愉快!

  • 老师好,第2种,是先问:当input!=" 退出"后,才执行循环体里的内容,此时input不是没定义么?为什么没报错?

    2022-02-10 11:58:47
  • 同学你好,第二种方式其实不会涉及到报错,但是在进入的时候input的确是undefined,没有报错的原因是这里有个知识点,叫做“变量提升”或者有人称呼这种是叫“变量提前”。这是在Es6之前遗留下来的问题如下例:

    1、如果说页面中只有一个未定义的变量我们使用它,则直接报错。

    https://img1.sycdn.imooc.com//climg/6204a2b509c3b4d808510146.jpg

    https://img1.sycdn.imooc.com//climg/6204a2e3099be91905200142.jpg

    2、如果说在使用未定义的变量之后声明了变量,那么不会报错,但是如果打印怎会出现undefined。

    https://img1.sycdn.imooc.com//climg/6204a349096c9a1508490191.jpg

    https://img1.sycdn.imooc.com//climg/6204a37809ae1c7104440140.jpg

    这种情况就可以解释同学的疑问点,它其实等价于:

    https://img1.sycdn.imooc.com//climg/6204a4cd0940665a10370235.jpg

    https://img1.sycdn.imooc.com//climg/6204a4dc09ce97c904300169.jpg

    那么我们结合上面方法2中的代码,是不是在while中声明了input变量且赋值了。那么js会把声明的input变量名直接提到前面去了,但是并没有赋值所以系统直接给了undefined。如下图:

    https://img1.sycdn.imooc.com//climg/6204a5df09abb79107980301.jpg

    https://img1.sycdn.imooc.com//climg/6204a5a00994e7d404560185.jpg

    另变量提升这一块在后期ES6的课程中也会提到,同学看看上面例子是否能理解。

    同学敲敲试试,祝学习愉快!

    2022-02-10 13:45:13
  • 明白了,谢谢,怪不得数组的长度要减1.

    2022-02-11 11:55:48
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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