我们学习了数组的解构赋值,小伙伴们编写代码来实现一下三个变量值的交换吧
任务要求如下:
1、声明三个变量,分别为x=10, y=20, z=30
2、实现这三个变量的交换,得到的结果为x=30,y=10, z=20
3、输出交换之后的x、y、z的值
实现效果如下:
我们学习了数组的解构赋值,小伙伴们编写代码来实现一下三个变量值的交换吧
任务要求如下:
1、声明三个变量,分别为x=10, y=20, z=30
2、实现这三个变量的交换,得到的结果为x=30,y=10, z=20
3、输出交换之后的x、y、z的值
实现效果如下:
登录后即可发布作业,立即登录
全部作业 57
在 JavaScript 中,var和let都是用于声明变量的关键字,它们有以下区别:
作用域
var:具有函数作用域。即声明的变量在整个函数内都可访问 ,即便在函数内的块级结构(如if语句块、for循环块)中声明,在块外也能访问。例如:
javascript
function test() {
if (true) {
var a = 10;
}
console.log(a); // 10,在if块外仍能访问
}
test();
let:具有块级作用域。声明的变量仅在其所在的块级结构(由{}包裹,如if块、for循环块)内有效,块外无法访问。例如:
javascript
function test() {
if (true) {
let b = 20;
}
console.log(b); // ReferenceError: b is not defined,在if块外无法访问
}
test();
变量提升
var:存在变量提升现象。在代码执行前,var声明的变量会被提升到其作用域顶部,但初始化(赋值)不会提升。所以可以在声明前使用该变量,不过值是undefined。例如:
javascript
console.log©; // undefined
var c = 30;
上述代码实际执行顺序相当于:
javascript
var c;
console.log©;
c = 30;
let:不存在变量提升。在声明变量之前使用它会报错,因为let声明的变量在声明位置才会被初始化,在声明之前处于 “暂时性死区”。例如:
javascript
console.log(d); // ReferenceError: Cannot access ‘d’ before initialization
let d = 40;
重复声明
var:在同一作用域内允许重复声明变量。后面声明的会覆盖前面的声明。例如:
javascript
var e = 50;
var e = 60; // 不会报错,e的值为60
let:在同一作用域内不允许重复声明变量。否则会抛出语法错误。例如:
javascript
let f = 70;
let f = 80; // SyntaxError: Identifier ‘f’ has already been declared
全局对象属性
var :在全局作用域中使用var声明的变量会成为全局对象(浏览器环境下是window对象 ,Node.js 环境下是global对象)的属性。例如在浏览器环境中:
javascript
var g = 90;
console.log(window.g); // 90
let :在全局作用域中用let声明的变量不会成为全局对象的属性。例如:
javascript
let h = 100;
console.log(window.h); // undefined
通常更推荐使用let声明变量,因为它能更好地控制作用域,减少变量意外污染全局作用域或被重复声明等问题,让代码更易理解和维护 。 不过在一些需要考虑兼容性,或者利用变量提升特性的场景下,可能还会用到var 。