请问老师为什么这两个一个有undefined一个每有

请问老师为什么这两个一个有undefined一个每有


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>首字母变大写</title>

</head>

<body>

<script>

    //补充代码

    function x(str){

      var arrstr=str.split(" ");

      var yy='';

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

        var w=arrstr[i];

       var yy=yy+w.charAt(0).toUpperCase()+w.substr(1)+" ";

        console.log(typeof(yy))

      }

      return yy;

    }

    var yyyy=x("all time is no time when it is past");

    document.write(yyyy);

</script>

</body>

</html>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首字母变大写</title>
</head>
<body>
<script>
    //补充代码
    var a="all time is no time when it is past";
    var newstring="";
    function uppercaseFirst(str){
        var arr=str.split(" ");
        for(var i=0,len=arr.length;i<len;i++){
        var newstr=arr[i].charAt(0).toUpperCase()+arr[i].slice(1);
        var newstring=newstring+newstr+" ";
        }
        return newstring;
    }
    document.write(uppercaseFirst(a));
</script>
</body>
</html>

正在回答

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

2回答

你好同学,第一个没有是因为yy=''把它赋值为空字符串,所以在函数里面与其他字符串进行拼接的时候正常显示。而第二个有undefined是因为函数里面在计算时,使用var又重新定义了一次,如下

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

这里会涉及后面的知识预解析。首先要知道,函数里面如果声明了同名的变量,那么它就不会使用外部的了。那么它使用内容的变量newstring时,newstring会提前声明,并默认赋值为undefined。

相当于如下执行:

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

所以把函数里面newstring前面的var去掉就行。这些同学学到后面的知识就理解了。现在先简单了解就行。

祝学习愉快 ,望采纳。

  • 慕函数3852583 提问者 #1
    老师第二个var newstring="";不也是把它赋值为空字符串么?我这两个好像没区别啊请教老师。,
    2019-04-30 16:17:39
好帮手慕夭夭 2019-04-30 16:34:46

你好同学,是有区别的。同学认真对比一下就能发现了。第一个定义变量初始化放在函数外边,第二个放在了函数里面。因为这里涉及了后面课程的预解析的知识,可能给同学讲太多也不会理解。例如把第一个方式的变量定义移动它函数外就输出undefined。

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

祝学习愉快 ,望采纳。

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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