var
声明一个变量,可选择将其初始化为一个值
let
声明一个块作用域的局部变量,可选择将其初始化为一个值
const
声明一个只读的常量
变量
一个JS标识符必须以字母、下划线或者美元符号开头;后续的字符可以是数字,
而且JS语言区分大小写
声明变量
1.使用关键词var。例如var a=1,这个语法可以用来声明局部变量和全局变量
2.直接赋值。例如,x=1。这样就会声明一个全局变量并会在严格模式下产生一个
ReferenceError引用错误,表明一个不存在的变量被引用。声明变量时不应该用这种方式
3.使用关键词let。例如let y=2。这个语法可以用来声明块作用域的局部变量
变量求值
用var或let声明的且未赋值的变量,值会被设定为undifined。
试图访问一个未声明的变量或者访问一个使用let声明的但未初始化的变量会导致一个ReferenceError
异常被抛出
可以使用undefined来判断变量是否已赋值
var x; if(x===undefined){ doThis(); }else{ doThat(); }
undefined值相当于布尔值的false
var x; if(!x){ myFunction(); }
数值环境中undefined值会被转换为NaN
var x; a+2 //NaN
对一个null变量求值时,空值null在数值类型环境下会被当作0来对待,布尔类型环境中会被当作false
var n=null; typeof(n); //object
变量的作用域
在所有函数之外声明的变量叫做全局变量,它可被当前文档中的任何其他代码访问。在函数内部声明的变量,叫做局部变量,它只能在该函数内部引用。
if (true) { var x = 1; } console.log(x) // 1
控制台输出1,因为x的作用域是声明了x的那个函数(或全局范围),而不是if 语句块
if (true) { let y = 1 } console.log(y); //RefereceError:x is not defined
变量声明提升
JavaScript可以引用稍后声明的变量而不会引发异常。这一概念成为变量声明提升;然而提升后的变量返回undefined值
console.log(x === undefined); var x = 3;
函数提升
对于函数,只有函数声明会被提升到顶部,而不包括函数表达式。
/ * 函数声明 */ foo; // "bar" function foo(){ console.log("bar"); }
全局变量
全局变量实际上是全局对象的属性。在网页中,全局对象是window,所以可是用形如window.variable的语法来设置和访问全局变量。
常量
可以使用关键字const创建以一个只读的常量。常量标识符的命名规则和变量相同:必须以字母、下划线或美元符号开头并可以包含字母、数字或下划线。
const x = "xiaobai";
常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明。它必须被初始化为某个值。
常量的作用域规则和let块级作用域变量相同。若省略const关键字,则该标识符将被视为变量。
在同一作用域中,不能使用与变量名或函数相同的名字来命名变量。