javascript var关键字详解

关于var关键字需要知道的

  • 对于var关键字,要么定义全局变量、要么定义函数内变量;
  • 不能定义只在一个语句块儿内部起作用的变量;
  • 这叫做js的函数级作用域(function-level scope);
1
2
3
4
5
6
(function test(){
if (true) {
x = 5; //x的作用域为全局
}

console.log(x); // 5
})
();

1
2
3
4
5
6
7
8
9
10
function foo() { 
var x = 1;
if (x) {
(function () {
var x = 2;
}());
}
console.log(x); //1
}
foo();

在严格模式下不能定义一个不被var修饰的变量

1
2
3
4
5
6
7
8
(function test(){
if (true) {
x = 5; //x的作用域为全局,严格模式报错
}
console.log(x); // 5
})();

console.log(x); // 5

用let关键字定义块儿级作用域变量

  • 下面程序的lemma变量作用域为if语句块儿中;
1
2
3
4
5
6
7
8
9
"use strict"
function test(x,y){
if(x>y){
let lemma = x+3;
alert(lemma*y); //5
}
alert(lemma); // error
}
test(2,1)

javascript变量提升(hoisting)

  • 变量提升是指,你可以引用稍后声明的变量,而不会引发异常;
  • JavaScript变量感觉上是被“举起”或提升到了所有函数和语句之前;
  • 提升后的变量将返回 undefined 值;
  • 即使在使用或引用后面存在声明和初始化操作,仍将返回 undefined值;
1
2
console.log(x === undefined); // logs "true"
var x = 3;
1
2
3
4
5
6
var myvar = "my value";

(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();

定义常量

  • 可以用关键字 const 创建一个只读的常量;
  • 常量标识符的命名规则和变量的相同:必须以字母、下划线或美元符号开头并可以包含有字母、数字或下划线;
  • 常量不可以通过赋值改变其值,也不可以在脚本运行时重新声明;
  • 常量,包括全局常量,都必须带const关键字;
  • 若const关键字被省略了,该标识符将被视为变量;
1
const prefix = '212';
您的支持是对我最大的鼓励!