一、变量的定义及声明
在javascript中变量仅仅是用来保存值的一个占位符而已,定义变量时要使用关键字var后跟一个变量名,如下所示:
var message; //定义一个变量message,像这样未经初始化的变量,会保存一个一个特殊的值-undefined var message='hi'; //定义一个变量并初始化
注意:
1、用var操作符定义的变量将成为该变量的作用域中的局部变量,也就是说,如果在该函数中使用var定义了一个变量,那么在该函数退出后将会被销毁。
2、可以省略var操作符,从而创建一个全局变量。如下所示:
function test(){ message='hi'; } test(); alert(message); //弹出hi
二、变量的作用域
1、全局变量/局部变量
变量分为全局变量和局部变量,全局变量拥有全局作用域,在javascript代码中的任何地方都是有定义的,局部变量是在函数内声明的变量。局部变量的优先级高于同名的全局变量。如果在函数内声明的局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就会被局部变量覆盖
2、函数作用域
(1)javascript中没有块级作用域,只有函数作用域:变量在声明他们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。
(2)在javascript函数里声明的所有变量(但不涉及赋值)都被提前到函数体的顶部(声明提前).如下所示:
var scope="global"; function f(){ console.log(scope); //输出undefined,而不是global var scope="local" ; console.log(scope); //输出local } f(); 上面一段代码等价于: var scope="global"; function f(){ var scope; //声明提前,在函数体内声明的变量都提前至函数体顶部 console.log(scope); //变量虽然存在,但是执行到这一步的时候,函数并未赋值 scope="local" ; console.log(scope); } f();
3、作用域链
JavaScript中,JavaScript里一切都是对象,包括函数。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是作用域,包含了函数被创建的作用域中对象的集合,称为函数的作用域链。
作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。