关于javascript函数中变量的作用域

今天读《JavaScript语言精粹》一书中关于作用域部分时,被一句话搞迷糊了。

原文是:"Javascript确实有函数作用域。那意味着定义在函数中的参数与变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都可见。"

当时理解的这句话就是:如果在函数内定义一个变量,那么在函数外部不能直接使用这个变量(除非外部已经有个同名的变量),否则会报not defined错误;在函数内无论在什么位置(可能在定义语句之前,也可能在之后)都能使用这个变量(包括其值)。

但经过一个小的测试用例后,发现自己理解错了,例子代码如下:

  
  
  
  
  1. function func(){ 
  2.     alert(a); 
  3.     var a = 5; 
  4. alert(a);
  5. func(); 

结果会依次打出:"undefined","5"

“可见”只是说明那个变量是存在的,相当于只是做了个“声明”,“值”只有在定义之后或者是进行赋值操作之后才能获取的到。

第一个alert语句只是知道有个叫a的变量被定义了,但还没赋值

第二个alert语句打的是已经定义并赋过值的a

哎,可能自己的理解能力有问题,但想真正理解javascript是需要下很大一番功夫的

你可能感兴趣的:(JavaScript,变量,作用域)