作为从一开始接触C、C++、C#的程序员而言,JavaScript的语法对我来说有些古怪,通过最近一年的接触,对它有了一定的了解,于是想把它的一些语法要点记录下来。

1. Block Scope vs. Function Scope

JavaScript第一点与C不同的是变量的作用范围。我们都知道,C风格的编程语言中,变量的作用范围是两个大括号之间,变量在两个大括号之外是不可见的,我们称之为Block Scope。

而JavaScript则不然 - 变量在真个函数内以及此函数的内嵌函数中均可见,我们称之为Function Scope。比如:

function test(o){

  var i = 0;

  if (typeof o == "object"){

    var j = 0;

    for (var k = 0; k < 10; k++){

      console.log(k);

    }

    console.log(k); // k = 10, k虽然在for循环中定义,可是在for循环之外的整个函数体依然可见。

  }

  console.log(j); // j =0 或者j = undefined,j虽然在if块中声明并定义,可是它在整个函数体中依然可见。

}

2. Hoisting

JavaScript变量的另外一个奇特的地方还在于,在一个函数体内任何一个地方定义(defined)的变量,都被假定为其在函数的一开始处被定义(但是可能没有初始化)。也就是说,所有变量的定义都被"hoisted"(提升)到函数的开始处。比如下面这个例子:

var scope = "global";

function f(){

  console.log(scope); // 输出"undefined",而不是"global",因为本地的scope变量已经生效,只是还没有初始化。

  var scope = "local"; // 在此处初始化,但是其实已经在函数的开始处被声明了,因此上面的代码输出的是"undefined"

  console.log(scope); //输出"local"

}

总而言之,JavaScript是一个Lexically Scoped Language,即JavaScript是基于词法作用域(lexically scoped)的,所以标识符被固定在它们被定义的作用域而不是语法上或是其被调用时的作用域。

最新文章

  1. restore和recover的区别(转)
  2. 在 Mac OS X 终端里使用 Solarized 配色方案
  3. HDU 4431 Mahjong(模拟题)
  4. 后台输出HTML
  5. Vim实现批量注释的方法
  6. 怎么让LinearLayout充满ScrollView
  7. Beyond REST: How to build a HATEOAS API in Java with Spring MVC, Jersey (JAX-RS) and VRaptor
  8. Spring MVC 中的 forward 和 redirect
  9. 《C/C++学习指南》 - 关于本书
  10. JS模块化写法
  11. AOP入门(转)
  12. git diff 与git format-patch 生成补丁包
  13. 使用wxpy来实现自动发送消息统计微信好友信息的功能
  14. 一本通1601【例 5】Banknotes
  15. java用poi读取Excel表格中的数据
  16. mysqldump只导出表结构或只导出数据的实现方法【转】
  17. 洛谷P1455搭配购买
  18. python web开发学习笔记一:javascript基础
  19. DDR4中的so-dimm 和component
  20. Marketing™Series用户手册(Marketing™Series Manual)

热门文章

  1. Timus 1446. Sorting Hat 分类问题
  2. pomelo 服务器开发常用术语
  3. scrollLeft、offsetLeft、clientLeft、clientHeight详解
  4. ssh docker container
  5. JavaScript学习总结二(Date对象的用法)
  6. [转]Oracle学习笔记——权限管理
  7. 【Codeforces Round#279 Div.2】B. Queue
  8. linux下安装软件后的环境变量设置
  9. hdu 1093 A+B for Input-Output Practice (V)
  10. JavaScript高级程序设计(第三版)学习笔记11、12、17章