3

我是 Javascript 世界的新手,并试图弄清楚我老师分配的这个作业。以下是他对预期内容的描述:

  1. 构建一个将启动程序的函数。请称之为 start()

  2. 从 start() 函数调用一个名为 getValue() 的函数

  3. getValue() 函数将从用户那里得到一个平方数。

  4. 同样从 start 函数,调用一个名为 makeSquare() 的函数

  5. makeSquare() 函数将对用户在 getValue() 函数中收到的数字进行平方。

  6. 确保在 makeSquare() 函数中显示平方数的结果。

这是我到目前为止所拥有的:

function start() {

    getValue();
    getSquare();
}

function getValue() {

    var a = prompt("Number please")
}

function getSquare() {

    var b = Math.pow(a)
    document.write(b)
}

start()

此分配不必使用任何 HTML 标记。我只有提示框可以工作,但没有其他功能。我是否以无法使用的方式使用变量?

4

5 回答 5

5

你很亲密。但是您似乎不了解范围以及如何准确使用该pow功能。

数学.pow:

Math.pow接受两个参数,基数和指数。在您的示例中,您只提供基础。这将导致问题,因为函数将返回值undefined并将其设置为b. 这就是它应该看起来的样子(如果你想平方它):

Math.pow(a, 2);

范围:

每个函数都有自己的作用域。您可以从函数内部访问在函数外部创建的其他变量和函数。但是您不能访问在另一个函数中创建的函数和变量。举个例子:

var c = 5;

function foo() { // we have our own scope
   var a = c; // Okay
}

var b = a; // NOT okay. a is gone after the function exits.

我们可以说一个函数是私有的。唯一的例外是我们可以从函数中返回一个值。return我们使用关键字返回值。它旁边的表达式是函数的返回值:

function foo() {
    return 5;
}

var a = foo(); // a === 5

foo()不仅调用函数,而且返回它的返回值。未指定返回值的函数的返回值为undefined。无论如何,在您的示例中,您可以这样做:

function getValue() {
    var a = prompt("Number please")
}

并像这样访问它:

// ...
var b = Math.pow(a)

您现在看到错误了吗?a是在函数中定义的,所以不能在函数之外访问。

这应该是修改后的代码(注意:始终使用分号。我在必要时将它们包括在内):

function start() {
    getSquare();
}

function getValue() {

    var a = prompt("Number please");
    return a;
}

function getSquare() {

    var b = Math.pow(getValue(), 2); // getValue() -> a -> prompt(...)
    document.write(b);
}

start();
于 2012-10-06T22:05:10.830 回答
0

你可以试试这个。

<script type="type/javascript">
function start(){
makeSquare(getvalue());
}

function getvalue(){
return prompt("enter a number");
}

function makeSquare(a){
var result=Math.pow(a,2);
alert(result);
}
start();
</script>
于 2012-12-26T00:10:53.590 回答
0
  1. getValue()需要返回该值,以便您可以将其传递给getSquare()函数。

  2. 在我看来,您应该始终以;

  3. 您可能需要将用户输入解析为数字。为此,您可以使用parseFloat(string).

  4. Math.pow接受两个参数,因此要获得正方形,您必须2在调用它时作为第二个参数传递。

我用一些澄清的评论编辑了你的代码:

function start() {
    // Catch the value returned by the function
    var value = getValue();
    // Pass the returned value to the square-function
    getSquare(value);
}

function getValue() {
    // Parse the user input into a number, and return it    
    return parseFloat(prompt("Number please"));
}

// Let the square-function take the user input as an argument
function getSquare(a) {  
    // Math.pow takes a second argument, which is a number that specifies a power
    var b = Math.pow(a, 2);
    document.write(b);
}

start();

另一种不太好的方法

在 JavaScript 中,变量作用域是基于函数的。如果使用var关键字声明变量,则它仅可用于该函数及其子函数。如果它在没有var关键字的情况下声明,或者在任何函数之外声明,它就会成为一个全局变量,该页面上运行的任何代码都可以访问该变量。

也就是说,您可以去掉函数var内的关键字getValue(),这将使变量成为a全局变量。getSquare()然后,您可以按照您在示例中尝试的方式访问它。

不过,这通常不是一个好主意,因为您会“污染”全局命名空间,并且您可能会冒着意外让另一个脚本使用同名的全局变量的风险,这会导致各种麻烦,当脚本开始使用相同的变量。

于 2012-10-06T21:52:16.260 回答
0

由于这是一个家庭作业,我不会直接回答你,但这里有一些线索。

在 javascript 中,变量是作用域的函数。这意味着var a内部getValue仅在其中可用。

您可以return从函数中获取值。

函数是 javascript 中的第一类对象,因此您可以将它们作为参数传递给其他函数,最后在该函数中调用它们。

于 2012-10-06T21:54:08.070 回答
0

我是否以无法使用的方式使用变量?

是的,这就是你的问题所在。大多数编程语言中的变量都有一个范围来确定它们在哪里可用。在您的情况下,ab分别是函数和的局部变量。这意味着它们在声明它们的函数之外不可用。getValue()makeSquare()

一般来说,这是一件好事。您应该对变量使用受限范围,以使程序中的数据“流”更清晰。使用返回值和参数在函数之间传递数据,而不是使变量成为全局变量:

function start() {
    var a = getValue();
    makeSquare(a);
}

// Return a value entered by the user
function getValue() {
    return prompt("Number please")
}

// Write the square of the `a` parameter into the document
function makeSquare(a) {
    var b = Math.pow(a)
    document.write(b)
}
于 2012-10-06T22:02:00.400 回答