码迷,mamicode.com
首页 > 编程语言 > 详细

关于JavaScript中没有块级作用域的理解

时间:2015-09-02 22:04:23      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

  引用《JavaScript权威指南》(第六版)中的举例

  代码段1:

  1. var scope="global";  
  2. function f(){   
  3.     console.log(scope);  
  4.     scope="local"  
  5.     console.log(scope);  
  6. }  
  7. f();

  会输出什么?

  答案:undefined  global

  

  代码段2:

  1. var scope="global";  
  2. function f(){  
  3.     var scope;  
  4.     console.log(scope);  
  5.     scope="local"  
  6.     console.log(scope);  
  7. }  
  8. f();

  又会输出什么?

  答案:undefined  global

 

  代码段3:

  1. var scope="global";  
  2. function f(){  
  3.     console.log(scope);  
  4. }  
  5. f();

  又会输出什么?

  答案:global

  通过以上三个例子,下面解释“JavaScript没有块级作用域,有函数作用域”这句话。

  在JavaScript中,由于函数作用域的特性,代码段1和代码段2是等价的,局部变量在整个函数体是中是有定义的,

也就是说,代码段1在函数体内的局部变量scope覆盖了同名全局变量,并且只有在程序执行到var 语句的时候,局部变量scope才会被真正的

赋值。因此,上述过程等价于:将函数内的变量声明“提前”至函数体顶部,同时变量初始化留在原来的位置:也就是代码段2。

  在具有块级作用域的编程语言中,在狭小的作用域里让变量声明和使用变量的代码尽可能靠近彼此,通常来讲,这是一个非常不错的编程

习惯。由于JavaScript没有块级作用域,因此,一些程序员特意将变量声明放在函数体顶部,而不是将声明靠近放在使用变量之处。这种做法

使得他们的源代码非常清晰地放映了知识的变量作用域。

关于JavaScript中没有块级作用域的理解

标签:

原文地址:http://www.cnblogs.com/xiaodongaini/p/4779406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!