const,var,let作为javascript中的三种三种声明变量的关键字,它们的作用区域是不用的。
插入:在js中用{}包裹的部内为一个代码块。
(1)var: ES5 中引入的声明变量的关键字。它具有函数作用域(function scope)或全局作用域(global scope)。这意味着,无论 var
声明在哪个代码块中(例如函数内部或全局作用域),变量都会提升到所在的作用域的顶部。如果在同一作用域内多次使用 var
声明同一个变量,后面的声明会覆盖前面的声明。
(2)const: ES6 中引入的关键字,用于声明常量。与 let
类似,const
声明的变量也具有块级作用域。不同之处在于,用 const
声明的变量必须进行初始化,并且一旦被赋值后就不能再修改。const
声明的常量的值在声明后是不可变的。
(3)let:ES6 中引入的声明块级作用域变量的关键字。块级作用域是指在一对花括号 {}
内部声明的变量只在该代码块内部有效。使用 let
声明的变量不会被提升到块的顶部,只在声明之后才能使用,并且允许在同一作用域内多次声明同一个变量。
总结:
var
是 ES5 中引入的关键字,具有函数作用域或全局作用域,变量会被提升。let
是 ES6 中引入的关键字,具有块级作用域,变量不会被提升,可以在同一作用域内多次声明。const
是 ES6 中引入的关键字,用于声明常量,也具有块级作用域,声明时必须初始化,并且值不能被修改。
变量提升:JavaScript 中的一种特性,它指的是在代码执行之前,JavaScript 引擎会将变量的声明部分提升到作用域的顶部。这意味着无论在何处声明变量,它们都会被视为在当前作用域的顶部进行声明。
步骤:
(1)变量声明提升:JavaScript 引擎会找到作用域内的所有变量声明,并将它们提升到作用域的顶部。这包括使用 var
关键字声明的变量以及函数声明。
(2)变量赋值声明:尽管变量声明被提升,但变量的赋值操作仍然保留在原来的位置。也就是说,变量的赋值操作不会被提升。
实例:
console.log(x); //undefined
var x=10;
注意点:只是声明被提升,赋值还是会留在原地。且对象是使用 var
关键字声明的变量以及函数声明。
为了避免变量提升带来的困惑和错误,推荐在作用域的顶部声明变量,并养成良好的编码习惯,避免在变量声明之前使用变量。此外,使用 let
和 const
关键字声明变量可以避免变量提升的影响,因为它们具有块级作用域,不会被提升到作用域的顶部。