下面是JavaScript变量和循环中的var和let的详细攻略。
JavaScript变量
JavaScript中的变量使用var关键字来声明。每个变量都有一个特定的范围,称为作用域。一个变量可用的作用域由声明变量的方式所决定。若没有用var关键字声明变量,会将变量当作全局变量来处理,而这种情况是需要尽量避免的。
var关键字的用法
var关键字用来声明一个变量,示例代码如下:
var a = 1;
上面的代码将声明一个名为a的变量,并赋值为1。
变量作用域
变量作用域是指变量在哪里是可见的。在JavaScript中,变量可以是全局的,也可以是局部的。
全局变量
在函数之外声明的变量,称之为全局变量,它们的作用域是整个JavaScript代码。在代码的任何位置都可以访问这些变量。
以下示例展示了如何在JavaScript中创建一个全局变量:
var a = 10; // 全局变量
function func() {
console.log(a); // 在函数内部也可以访问全局变量
}
func();
在上面的代码中,我们创建了一个全局变量a,它可以在函数内部和外部都能够被访问到。
局部变量
局部变量只能在函数内部访问或者声明的代码块内部访问。在函数内部声明的变量局部变量,而在代码块内部声明的变量只能在该代码块内访问,不能被外部访问。
以下示例展示如何在JavaScript中定义一个局部变量:
function func() {
var a = 10; // 局部变量
console.log(a); // 在函数内部能够访问局部变量
}
func();
在上面的代码中,我们定义了一个名为a的局部变量,只能够在函数内部访问。
变量提升
在JavaScript中,变量在声明之前就可能被使用,这种行为被称为变量提升。通过使用var关键字,JavaScript变量可以在变量声明之前在代码中引用,但其值为undefined。
例如:
console.log(a); // 输出undefined
var a = 10;
在上面的代码中,变量a在被声明之前就被引用了,变量被提升了,但其值为undefined。
JavaScript循环
循环是一种重复执行某些操作的方法。在JavaScript中,有许多种类型的循环,如for,while,do-while等。
for循环
for循环是一种常用的循环,语法如下:
for ([initialization]; [condition]; [final-expression]) {
// statement
}
以下是for循环的示例代码:
for (var i = 0; i < 10; i++) {
console.log(i);
}
在上面的示例代码中,循环从0开始,以i++的方式递增i的值,当i的值小于10时,循环继续执行。
循环变量的作用域
在循环中,使用var来定义循环变量时,变量的作用域是它所在的完整函数。例如以下示例代码:
function func() {
for (var i = 0; i < 10; i++) {
// 执行一些操作
}
console.log(i); // 输出10
}
func();
在上面的示例代码中,变量i在for循环内部声明,但变量的作用域是func函数。
let关键字
在ES6之后,JavaScript引入了一个新的关键字let来声明变量。与var关键字不同的是,使用let关键字声明的变量的作用域是块级作用域,即只在其所在的代码块有效。
以下示例展示使用let关键字的for循环:
for (let i = 0; i < 10; i++) {
// 执行一些操作
}
console.log(i);
在上面的示例代码中,使用let关键字定义的变量i的作用域仅限于for循环内部,因此在循环外部无法访问它。
使用let关键字的变量不会被提升到代码的顶部,只有在声明后才可以被使用。
示例说明
示例1: 使用var关键字定义变量的示例
var a = 10; // 全局变量
function func() {
var a = 5; // 局部变量
console.log(a); // 输出5
}
func();
console.log(a); // 输出10
在上面的示例中,我们先定义了一个全局变量a,并将其值设为10。接着在func函数内又定义了一个局部变量a,并将其赋值为5。在函数中,输出的是局部变量a的值,而函数外部输出的是全局变量a的值。这是因为变量作用域的原因。
示例2:使用let关键字定义变量的示例
for (let i = 0; i < 3; i++) {
console.log(i);
}
console.log(i);
在上面的示例中,我们使用let关键字定义变量i,并将其作为for循环的循环变量。在for循环之后,我们尝试输出变量i的值,结果发现输出的是ReferenceError。这是因为变量i的作用域仅限于for循环内部。在循环外部,变量i已经无法访问。