JavaScript——变量及其作用域
变量是存储信息的容器,JS变量可用来保存任何值
变量类型
- JavaScript是一种无类型、弱检测的语言,对变量的定义不需要声明变量类型,只需要赋值即可。
变量的声明
- 隐式和显式声明
- 隐式为全局,显式为局部变量。隐式执行不会报错,访问它会报错。
变量作用域
全局变量
- 所有在函数外面声明的变量都处于全局作用域中
- 如果一个变量第一次初始化/声明的时候没有使用var关键字,那么他自动加入到全局作用域中
- setTimeout中的函数是在全局作用域中执行的
var Value1 = 200;
var Value2 = 20;
var myObj = {
Value1 : 10,
Value2 : 1,
caleculatedIt: function(){
setTimeout(function(){
console.log(this.Value1 * this.Value2);
}, 1000);
}
}
myObj.caleculatedIt(); //4000
局部变量(处于函数级别的作用域)
- 没有块级作用域
- 在一个函数内定义的变量只能在函数内部访问,或者这个函数内部的函数访问。(闭包除外)
- 局部变量的优先级大于全局变量
- 如果在全局作用域中什么的变量在局部作用域中再次声明,那么在局部作用域中调用这个变量时,优先调用局部作用域中声明的变量
变量提升
- 所以的变量声明都会提升到函数的开头(如果这个变量在这个函数里面)或者全局作用域的开头(如果这个变量是一个全局变量)
function showName () {
console.log ("First Name: " + name);
var name = "Ford";
console.log ("Last Name: " + name);
}
showName ();
// First Name: undefined
// Last Name: Ford
- 函数声明会覆盖变量声明(若变量声明并未赋值)
var myName;
function myName () {
console.log ("Rich");
}
console.log(typeof myName); // function
- 在严格模式下,如果没有先声明变量就给变量赋值将会报错
基本类型和引用类型
基本类型
- 指简单的数据段。number、string、boolean、null、undefined
- 按值访问,可以直接操作保存在变量中的实际值
引用类型
- 指对象类型。比如Object、array、function、Data等
- 引用数据类型是保存在堆内存中的对象