首页 > 代码库 > 关于JavaScript 中的变量

关于JavaScript 中的变量

  1. JS的变量声明语句永远是在其作用域中最先执行的,不论其定义的位置在哪里;
  2. 函数体内部,局部变量的优先级比同名的全局变量高。
  3. Javas作用域分类
  4. 未使用var定义的变量不论定义在什么位置都是全局变量,全局变量实质属于window下的属性

1 JS的变量声明语句永远是在其作用域中最先执行的,不论其定义的位置在哪里

2      var test= function()3      {4       console.log(s);//输出结果为undefined5       var s="you";6      };7      test();                

原因就是在test函数作用域内,虽然var s="you"在console后面,但是由于变量的声明语句会是最先执行,因此等价于:

2        var test= function()3        {4        var s;//相当于此处先执行了一步变量声明 但未赋值5            console.log(s);//输出结果为undefined6         var s="you";7        };8        test();                   

console.log(s)结果为undefined;

2函数体内部,局部变量的优先级比同名的全局变量高

        var s="hello";     var test= function()     {      var s="you";      console.log(s);//输出结果为”you“     };     test();

局部变量优先级高,所以打印结果为"you"

3JS的作用域分类

Javascript作用域分类只有两种:全局作用域和方法作用域

函数又称作方法,因此方法作用域可以理解为函数内作用域,不同于C或者C++语言,JS没有块级作用域,for(var i=0;;i++)此处的i作用域就是for循环所在函数的作用域,而不是仅仅在for循环内部有效;

4未使用var定义的变量不论定义在什么位置都是全局变量

function test()//定义函数test{  i=100;          }test()//执行函数testconsole.log(i);//输出100
console.log(window.i);//输出100

另外,需要注意的是 function XXX(){};仅仅是定义一个XXX()的函数,并没有执行函数代码,若此处没有test(),那么输出的i是undefined,也可以将

function XXX(){//code};XXX();合并写成:(function XXX(){//code})():

形如:(function XXX(){})()是先定义函数XXX并且执行函数;此种写法的好处是能保证变量生存期,较少全局变量,易于变量回收

 

关于JavaScript 中的变量