JavaScript学习笔记之变量

变量的类型

JavaScript的变量是无类型的(untyped),这点和java、c等语言是不同的。像java这样有严谨类型声明的变量比较适合于工程较大的后台中,方便程序的维护和管理,而javascript一般作为脚本使用。采用无类型的变量比较简单,且容易掌握。

变量的声明

在javascript中,使用一切变量之前都必须声明。尽管你会看到一些javascript代码貌似直接使用了变量,而没有在之前进行声明。这种情况下,该变量被隐式地声明为全局变量。即使你再函数的内部使用了隐式声明的变量,那么这个变量也会是全局变量。
提到变量的声明,还有一点得说的是javascript中的undefined类型。undefined类型通常包括三种情况:

  1. 未声明变量,直接使用,代码如下。在这种情况下,javascript会报一个变量为定义的错误。
console.log(x);
  1. 变量声明,但并未赋值。这种情况下,控制台会输出undefined。
var x;
console.log(x);
  1. 使用了对象中不存在的属性;这种情况下,控制台也会输出一个undefined。
var obj = new Object();
obj.x = 3;
console.log(obj.y);

变量的作用域

变量的作用域:全局变量和局部变量。当然,一般的教程上面都会这样说,让你区分全局变量和局部变量。其实在我看来,javascript中并没有全局和局部变量之分。全局变量其实也可以看做是局部变量,因为它们其实都是js对象中的私有属性。
我们知道js可以创建对象,在我们创建的对象中声明的变量被看做是局部变量。因为它只在这个对象中有效,在这个对象的外部是无法访问的。而这个对象叫做调用对象。
或者是在js定义的函数中声明的变量,也被看做是局部变量。同上面所述。
但是上面两种情况下的局部变量,我要强调一点。就是一定要是被声明的变量。看下下面的两段代码:

var x = 3;
function showX(){
  console.log(x);
}
showX()
var x = 3;
function showX(){
  var x = 5;
  console.log(x);
}

在第一段代码中,使用的x并未声明,它使用的全局的变量x。第二段代码中,x是声明的,属于局部变量。
这里说明的一点是,如果局部变量和全局变量同名。那么在在局部变量的作用域内,使用的是局部变量。这就是强龙不压地头蛇的道理。
最后补充说明的一点是关于js中的全局变量,我们为什么叫他全局变量呢。其实,所谓的全局变量也只是定义在全局对象中的变量,因此我们叫他全局变量,因为它在这个全局对象中可见,可以说是可见范围最大的了。
那么js中全局对象有时什么呢,对,就是window对象。也就是你的浏览器中每个标签也都是一个独立的window对象,js代码独立运行在每个标签也中互不干扰,同时他们也没有权限去执行其他标签页的js代码,这是设计者处于安全性的考虑。同时,在html中内嵌的frame框架,也是一个单独的window对象。

基本类型和引用类型

基本类型是指变量在内存中所占的大小固定,包括:数值、布尔、null和undefined。
引用类型在内存中所占大小不是固定的,包括数组和对象以及函数。
这里我们并没有提及字符串类型,它是一种比较特殊的类型。

你可能感兴趣的:(JavaScript)