6.javascript中的关键字var&let&const
1.什么是全局作用域?
在函数之外申明的变量拥有全局作用域。我们也称之为全局变量
全局变量可以在javascript程序中的任何位置访问。
var carName="我是全局作用域的变量"; //此处可以使用carName function myFunction(){ //此处也可以使用carName }
2.什么是函数作用域?
就是在函数体内申明的变量拥有函数作用域。我们也称之为局部变量
局部变量只能在它申明的函数内访问。
3.由于使用var申明的变量是没有{}块作用域,导致在在块外面申明的变量在块里面再次申明会覆盖原先的值。
var x = 10; // 此处 x 为 10 { var x = 6; // 此处 x 为 6 } // 此处 x 为 6
4.所以有了块作用域的let和const来申明变量,这样块里面申明的变量名称如果跟块外面申明的变量名称一样也不会干扰。
var x = 10; // 此处 x 为 10 { let x = 6; // 此处 x 为 6 } // 此处 x 为 10
5.通过var申明的全局作用域的变量是window对象,
var myName="我是var定义的全局变量";
window.myName
就可以调用这个myName的值了,但是通过let申明的全局变量就不属于window对象
6.在相同的作用域或相同的块中,通过let和var申明的变量名称不可一致、
一句话概括:同一作用域中,他们是仇人,别让我看见你跟我名字一样
var x = 10; // 允许 let x = 6; // 不允许 { var x = 10; // 允许 let x = 6; // 不允许 }
let x = 10; // 允许 let x = 6; // 不允许 { let x = 10; // 允许 let x = 6; // 不允许 }
7.const通常用来定义常量,只定义一次,该值不可重新赋值。而且在申明的时候就必须直接赋值。
const PI = 3.141592653589793; PI = 3.14; // 会出错 PI = PI + 10; // 也会出错
8.const创建的对象,数组。我们可以更改对象,数组的属性,元素。但是不能重新对属性赋值
// 您可以创建 const 对象: const car = {type:"porsche", model:"911", color:"Black"}; // 您可以更改属性: car.color = "White"; // 您可以添加属性: car.owner = "Bill";
const car = {type:"porsche", model:"911", color:"Black"}; car = {type:"Volvo", model:"XC60", color:"White"}; // ERROR
// 您可以创建常量数组: const cars = ["Audi", "BMW", "porsche"]; // 您可以更改元素: cars[0] = "Honda"; // 您可以添加元素: cars.push("Volvo");
const cars = ["Audi", "BMW", "porsche"]; cars = ["Honda", "Toyota", "Volvo"]; // ERROR