我是Javascript世界的新手,并试图找出我老师指定的这项任务。以下是他对预期内容的描述:
构建一个启动程序的函数。请将其称为start()
从start()函数调用一个名为getValue()的函数
getValue()函数将从用户获得一个将被平方的数字。
同样从start函数调用一个名为makeSquare()
makeSquare()函数将平方用户在getValue()函数中接收的数字。
确保显示makeSquare()函数内部数字的平方结果。
这是我到目前为止所做的:
function start() {
getValue();
getSquare();
}
function getValue() {
var a = prompt("Number please")
}
function getSquare() {
var b = Math.pow(a)
document.write(b)
}
start()
此作业不必使用任何HTML标记。我只有提示框才能工作,但没有别的办法。我是否以不能使用的方式使用变量?
答案 0 :(得分:5)
你很亲密。但似乎您不了解作用域以及如何使用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();
答案 1 :(得分:0)
您的getValue()
需要返回该值,以便您可以将其传递给getSquare()
函数。
在我看来,您应该始终以;
您可能需要将用户输入解析为数字。为此,您可以使用parseFloat(string)
。
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()
范围内以您在示例中尝试的方式访问它。
这通常不是一个好主意,因为你会“污染”全局命名空间,并且你将面临使用具有相同名称的全局变量意外地拥有另一个脚本的风险,这将导致所有类型的麻烦,当脚本开始使用相同的变量时。
答案 2 :(得分:0)
由于这是一个家庭作业,我不会直接给你答案,但这里有一些线索。
在javascript变量中是函数作用域。这意味着var a
内的getValue
仅在那里可用。
您可以return
来自某个功能的值。
函数是javascript中的第一类对象,因此您可以将它们作为参数传递给其他函数,最后在函数内部调用它们。
答案 3 :(得分:0)
我是否以不能使用的方式使用变量?
是的,这就是你的问题所在。大多数编程语言中的变量都有一个范围,用于确定它们的可用位置。在您的情况下,a
和b
分别是函数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)
}
答案 4 :(得分: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>