一个js面试题

function convert(s) {
    console.log(s);//hi
    s +=s.toUpperCase();
    console.log(s);//hiHI
}
function funny(s) {
    convert(s);
    console.log(s);//hi
}
funny('hi');//求问为什么第三个是hi吗?为什么不是hiHI
阅读 2.8k
5 个回答

    function convert(otherStr) {
        console.log(otherStr);//hi
        otherStr += otherStr.toUpperCase();
        console.log(otherStr);//hiHI
    }
    function funny(str) {
        convert(str);
        console.log(str);//hi
    }
    funny('hi');

不知道这样是不是能看明白一点

另外如果想第三个想输出hiHI可以吧代码改成如下

function convert(otherStr) {
        console.log(otherStr);//hi
        otherStr += otherStr.toUpperCase();
        console.log(otherStr);//hiHI
        return otherStr
    }
    function funny(str) {
        //用一个变量来接收convert返回的值,当然也可以不接收直接打印出来
        var res = convert(str);
        console.log(res);//hiHI
    }
    funny('hi');

.......你的变量是局部变量,你convert 函数没有返回,funny中的s 变量,并没有被改变,当然还是hi了。。

传入convert()的s是值传递,并不会修改funny()中的s的值。所以在退出convert()不变.

搞懂基本类型和引用类型的区别很重要。。。。

可以return s;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题