目录
任务描述
变量可以看成语言中用来标记和存储数据的一种记号。
本关任务:定义并初始化一个全局变量 b ,定义一个局部变量 a ,并赋值,使其覆盖已有的全局变量 a 。在函数 variableTest 中增加代码,使函数输出100+10*c
,其中 c 为输入,函数体见测试说明部分。
相关知识
JavaScript中的变量
不同于 C 或 Java,JavaScript 是一种动态类型的语言,即申明的时候不指定变量的数据类型,而在运行的时候根据变量的具体值动态的判断变量的数据类型。
JavaScript 的变量名以字母或者$
或者_
开头;变量名只能含有字母、数字、下划线和美元符号;大小写敏感;不能使用保留的关键字,如 html 、 var、function 等,这一条一定要记住,使用关键字造成的错误往往很难排除。
JavaScript中的变量的申明、初始化和赋值
- 变量的申明 在 JavaScript 中,申明变量以关键字 var 开头,空一格后再接变量的名字;当然,可以一次申明多个变量,这时 var 只需要出现一次,多个变量名之间用英文的逗号隔开即可。如:
var myvar1; // 申明变量"myvar1" var myvar2,myvar3,myvar4; // 一次申明三个变量
- 变量的初始化和赋值 既然变量是用来记录数据的,如何给变量赋值呢?简单来说,和数学中一样,用一个等号连接变量名和变量的值即可,对于数字的赋值,直接用等号连接数字和变量,对于字符串的赋值,需要将字符串包含在英文双引号之中。
变量的第一次赋值称之为初始化。 你可能已经想到了,申明和初始化能一起进行吗?答案是肯定的,下面我们给出具体的例子:
var numberVar; // 申明
numberVar = 1; // 赋值为数字
var stringVar; // 申明
stringVar = "I am a String"; // 赋值为字符串
var myNumber = 2; // 申明的同时赋值为数字
var myString = "我是字符串"; // 申明的同时赋值
var number1 = 1,number2 = 2; // 一次申明、赋值多个变量
需要注意的是,一个变量经过多次赋值,它的值为最后一次赋值的值。
JavaScript中的变量的作用域
变量的作用范围,或者说作用域,是指变量保持有效的范围,JavaScript 中的变量广义上来说分为局部变量和全局变量。
-
全局变量 在函数外部申明的变量称为全局变量,全局变量的作用自申明的地方起,到整个 JavaScript 文件的末尾(包括这其中的所有函数的内部)。下面是一个例子:
var wholeVar = 12; //申明并初始化一个全局变量 function() { var localVar = 1; //局部变量 console.log(wholeVar+localVar); //输出13 } console.log(wholeVar); //输出12
-
局部变量 局部变量是指申明在函数内部的变量,其作用域仅是本函数内部,在函数外不可用。 如果局部变量和全局变量的名字相同,那么在函数内部全局变量会被局部变量覆盖。
var myVar = 1; // 全局变量 function scope() { var myVar = 2; // 局部变量,覆盖了上面的值 console.log(myVar); // 输出2 }
-
申明提前 JavaScript 局部变量有一个很重要的概念,叫申明提前,我们先来看一个例子。
var wholeVar = 1; // 全局变量 function myTest() { console.log(wholeVar); var wholeVar = 2; console.log(wholeVar); }
关于第三行的输出,你的第一反应一定是1
吧,正确答案是undefined
。这是因为在函数内部,变量不论在何处申明,都应该看成是在最开始申明(赋值不会看成是在最开始赋值,这就是不输出2
的原因),这就是“申明提前”,所以,以上代码等价于:
var wholeVar = 1;
function myTest() {
var wholeVar; // 申明提前了,覆盖了全局变量
console.log(wholeVar); // 上面只申明,没赋值
wholeVar = 2;
console.log(wholeVar);
}
这个地方不太好理解,所以我们在编程的时候局部变量的名字最好不要和全局变量冲突。
编程要求
本关的编程任务是补全右侧代码片段中 Begin 至 End 中间的代码,具体要求如下:
- 定义一个局部变量 a ,并赋值使其覆盖已有的全局变量 a ;
- 定义一个全局变量 b 并初始化之;
- 上面两步必须使得函数 variableTest 返回
100+10*c
, c 为输入; - 具体请参见后续测试样例。
var a = 1;
// 请在此处编写代码
/********** Begin **********/
var b = 100;
/********** End **********/
function variableTest(c) {
/********** Begin **********/
var a = 10;
/********** End **********/
return a*c+b;
}