网页设计制作与网站建设课程,青海网站制作哪家好,专业网站建设哪家好,山东营销网站建设联系方式理解#xff1a;let变量的作用域只能在当前函数中js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客blog.csdn.net全局作用域中#xff0c;用 const 和 let 声明的变量不在 window 上#xff0c;那到底在哪里#xff1f;如何去获取#xff1f;blog.csdn.n…理解let变量的作用域只能在当前函数中js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客blog.csdn.net全局作用域中用 const 和 let 声明的变量不在 window 上那到底在哪里如何去获取blog.csdn.net早期的JavaScript中声明变量只能使用var关键字定义变量并没有定义常量的功能。通过var关键字定义的变量其作用域只能函数级或是全局作用域并没有块级作用域ES6(ECMAScript 2015)对这一问题做了改善增加了用于定义块级变量的let关键字和用于定义常量的const关键字JavaScript let 和 constECMAScript 2015(ECMAScript 6)ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。let 声明的变量只在 let 命令所在的代码块内有效。const 声明一个只读的常量一旦声明常量的值就不能改变。在 ES6 之前JavaScript 只有两种作用域 全局变量 与 函数内的局部变量。var定义变量1.1 语法及说明1.2 使用及特点let定义块级变量 2.1 语法及说明2.2 与var的异同const定义常量1. var定义变量1.1 语法及说明var关键字用于声明一个或多个变量声明多个变量时使用逗号(,)分隔声明变量的同时可以对其初始化。语法法结构如下var varname1 [ value1 [, varname2 [, varname3 ... [, varnameN]]]];varname1…varnameN - 变更名。可以是任何合法的标识符。value1…valueN - 初始化值。可选。可以是任何合法的表达式。使用var声明变量时声明的变量作用域是在当前位置的上下文件中函数的内部声明在函数内或者全局声明在函数外。1.2 使用及特点使用var定义的变量有以下特点变量声明提升无论在代码的任何位置声明变量执行引擎都会在任何代码执行之前处理。由于这个原因所以在代码中的任意位置声明变量与在代码开头声明变量是等效的。这意味着我们可以在定义变量之前使用这个行为叫做hoisting也就是把所有的变量声明移动到函数或者全局代码的开头位置。hoist http://itbilu.com;
var hoist;// 可以理解为
var hoist;
hoist http://itbilu.com;注意虽然变量声明提升让我们可以先使用再定义变量但建议总是先定义再使用变量这样可以让变量的作用域更加清晰。声明与未声名变量的区别未声明的变量会被添加一个全局作用域而声明变量作用域是当前上下文function x() {y 1; // 在严格模式下会抛出ReferenceErrorvar z 2;
}
x();console.log(y); // 1
console.log(z); // ReferenceError: z is not defined声明变量在任何代码执行前创建而未声明的变量只有在执行赋值操作的时候才会被创建console.log(a); // 抛出ReferenceError。
console.log(still going...); // 不会执行
var a;
console.log(a); // undefined或不同执行引擎的实现不同
console.log(still going...); // still going...声明变量是不可配置属性而未声明变量是可配置的var a 1;
b 2;delete this.a; // 在严格模式下抛出TypeError非严格模式下执行失败且无任何提示
delete this.b;console.log(a, b); // 抛出ReferenceErrorb属性已经被删除以上三点是声明与未声明变量区别但错误表现是不可预知的。而在严格模型下使用未赋值的变量会抛出异常推荐总是先定义(声明)再使用变量。全局作用域与函数作用域函数内部声明的变量只能在函数内部使用函数外部声明的变量可以全局使用var x 0;function f(){var x 1, y 1;
}
f();console.log(x); // 0
console.log(y); // ReferenceError: y is not defined2. let定义块级变量2.1 语法及说明let用于定义块级变量其语法结构类似于varlet varname1 [ value1 [, varname2 [, varname3 ... [, varnameN]]]];var声明的变量是函数级的或者是全局的而let用于声明块级作用域。如使用let声明一个块级变量if (x y) {let gamma 12.7 y;i gamma * x;
}2.2 与var的异同let与var的区别主要体现在作用域上当在子代码块中使用中其声明的是块级变量而var声明的是全局变量var a 5;
var b 10;if (a 5) {let a 4; // if 块级作用域var b 1; // 函数级作用域console.log(a); // 4console.log(b); // 1
} console.log(a); // 5
console.log(b); // 1在函数或程序顶层使用时let与var没有什么区别var x global;
let y global;
console.log(this.x); // global
console.log(this.y); // global3. const定义常量const用于声明一个或多个常量声明时必须进行初始化且初始化后值不可再修改const name1 value1 [, name2 value2 [, ... [, nameN valueN]]];const定义常量与使用let定义变量十分相似二者都是块级作用域都不能和它所在作用域内的其他变量或函数拥有相同的名称两者还有以下两点区别const声明的常量必须初始化而let声明的变量不用常量的值不能通过再赋值改变也不能再次声明。而变量值可以修改通过 const 定义的变量与 let 变量类似但不能重新赋值实例const PI 3.141592653589793;
PI 3.14; // 会出错
PI PI 10; // 也会出错块作用域在块作用域内使用 const 声明的变量与 let 变量相似。在本例中x 在块中声明不同于在块之外声明的 x实例var x 10;
// 此处x 为 10
{ const x 6;// 此处x 为 6
}
// 此处x 为 10在声明时赋值JavaScript const 变量必须在声明时赋值不正确
const PI; PI 3.14159265359; 正确
const PI 3.14159265359;不是真正的常数关键字 const 有一定的误导性。它没有定义常量值。它定义了对值的常量引用。因此我们不能更改常量原始值但我们可以更改常量对象的属性。原始值如果我们将一个原始值赋给常量我们就不能改变原始值实例const PI 3.141592653589793; PI 3.14; // 会出错 PI PI 10; // 也会出错常量对象可以更改您可以更改常量对象的属性实例// 您可以创建 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重新声明在程序中的任何位置都允许重新声明 JavaScript var 变量实例var x 2; // 允许
var x 3; // 允许
x 4; // 允许在同一作用域或块中不允许将已有的var或let变量重新声明或重新赋值给const实例var x 2; // 允许
const x 2; // 不允许
{let x 2; // 允许const x 2; // 不允许
}
在同一作用域或块中为已有的 const 变量重新声明声明或赋值是不允许的实例const x 2; // 允许
const x 3; // 不允许
x 3; // 不允许
var x 3; // 不允许
let x 3; // 不允许{const x 2; // 允许const x 3; // 不允许x 3; // 不允许var x 3; // 不允许let x 3; // 不允许
}
在另外的作用域或块中重新声明 const 是允许的实例const x 2; // 允许{const x 3; // 允许
}{const x 4; // 允许
}提升通过 var 定义的变量会被提升到顶端。如果您不了解什么是提升Hoisting请学习提升这一章。您可以在声明 var 变量之前就使用它实例carName Volvo; // 您可以在此处使用 carName
var carName;通过 const 定义的变量不会被提升到顶端。const 变量不能在声明之前使用实例carName Volvo; // 您不可以在此处使用 carName
const carName Volvo;