试图理解这个短暂的功能

时间:2012-01-17 03:05:24

标签: javascript

我认为我并没有完全理解这是如何运作的(我有点尴尬......有点意思很多)。基本上这应该创建一个提示符并写入console.log fullName,每个提示中的前两个字母要大写并连接在一起。请帮忙!

var fullName = ""; 
//Why does fullName have to be defined as a string? and when it's removed it doubles the value?

var name; 
var firstLetter;

var fixName = function () { 
    firstLetter = name.substring(0, 1); 
    name = firstLetter.toUpperCase() + name.substring(1);

    fullName = fullName + " " + name; 
    //what exactly is happening here under the fullName variable? What value is passing into fullName after it's being called? 
}

name = prompt("Enter your first name (all in lower case):"); 

fixName();

name = prompt("Enter your second name (all in lower case):"); 

fixName();

console.log("And your fullname is:" + fullName);

4 个答案:

答案 0 :(得分:2)

这是该函数的注释版本:

var fixName = function () { 
    // get the first letter of the string
    firstLetter = name.substring(0, 1); 

    // assign back to name the uppercased version of the first letter 
    // with the rest of the name
    name = firstLetter.toUpperCase() + name.substring(1);

    // add name onto the end of fullName
    // this will accumulate each time this function is called because
    // fullname is a global variable so it will get longer and longer each time
    // with more and more names in it
    fullName = fullName + " " + name; 
}

仅供参考,这是一个非常糟糕的代码。它应该至少使用一些局部变量和一个函数参数,如下所示:

var fullName = ""; 

function fixName(name) { 
    var firstLetter = name.substring(0, 1); 
    fullName = fullName + " " + firstLetter.toUpperCase() + name.substring(1); 
}

fixName(prompt("Enter your first name (all in lower case):"));
fixName(prompt("Enter your second name (all in lower case):")); 
console.log("And your fullname is:" + fullName);

它可能不应该修改全局变量作为副作用(可能应该使用返回值),但我没有改变它。

答案 1 :(得分:0)

fullName首先定义为一个空字符串,namename更改为第一个字母大写后会被连接到该字符串。

prompt的每次调用中,返回的值都存储到name,这也是一个全局变量。 name内的fixName()的值已更改为正确的大小写。

由于函数fixName()被调用两次并且fullName在全局范围内声明,因此fixName()的输出两次都被添加到变量fullName。第一个名字的拳头,姓氏的第二个名字(第二个名字)。最后,fullName应该包含Firstname Lastname(在开头有一个额外的空格)。

答案 2 :(得分:0)

代码是丑陋的,使用所谓的“副作用”,对全局变量进行操作,没有函数参数或函数结果。它用fullName填充空格,大写的名字,空格,大写的第二名。

使用以下内容会使全局变量变得不必要。

function capitalized(s) {
    if (s == "") return "";
    return s.substring(0, 1).toUpperCase() + s.substring(1);
}

答案 3 :(得分:0)

调整原始代码:

window.onload = function(){
    var names = {}, result = '';
    function fixName(input){
        return input.substr(0, 2).toUpperCase()
    }
    names.first = window.prompt("What is your first name?")
    names.last = window.prompt("What is your last name?")

    for(var n in names){
        var nameValue = names[n];
        result += fixName(nameValue)
    }
    console.log(result)
}

其他人会说明有更好的方法,但这是基于你所写的内容。快乐的Javascripting:)