日期:2014-05-16 浏览次数:20383 次
?
在Khan Academy(Khan Academy中文名称为可汗学院,是著名的网络课程学校,在iTunes U以及Youtube上非常火爆。),将以一种新的有趣方式教授学生计算机科学。其中最有趣的部分就是可能会将JavaScript作为学科的第一语言。
John Resig是Open Source的院长,他在博文中表示:
我们主要是教授那些已经接受了数学和科学中心课程的学生。因此我们能够做一些更加能激发大家兴趣的练习或是项目。
将JavaScript作为第一语言是一件非常令人激动的事情。向熟悉传统继承方法的开发者教授原型继承方法是一件令人沮丧的事情(导致许多诣在复制JavaScript中继承类的库如雨后春笋般涌现)。向那些没有接受过任何继承方法学习的人员介绍原型继承相对而言会轻松很多。学习函数型程序设计也是同样的道理。使用JavaScript也可以体验到函数型编程方式,并且也是我们课程的一个关注重点。
在将JavaScript作为第一语言之前,还有几点困难需要克服(这是人们在使用JavaScript时常常会碰到的)。为了避免这些常见的问题,我们需要在代码编辑器中使用某种形式的linting(JSLint或是JSHint,又或是其他类似的东西),用来告诉用户环境信息。
我们希望避免传统的语法教学方法,让大家能够通过使用这门语言更加容易地掌握它。这里有两个突出的改变,用来简化学习的过程。
注意:只有当学习者是那些从来没有接触过任何编程语言、相关规范、代码和库的人,这些特别建议才能真正有效。当然,如果需要提升学生的层次,让他们能够“看到任何一个跨浏览器的JavaScript代码,都能理解代码的含义”,还有许多工作要做。
强制类型转换
正如许多人指出的,强制类型转换是一件很混乱的事情,这一点Douglas Crockfor在JavaScript: The Good Parts中特别提到过。
可以在学习了其他的课程以后再来讨论这个问题…比如学习了原型,函数程序设计和闭包之后。
我推荐第一个改变就是只让学生使用===(和!==)。虽然使用‘==’在语法上比较短,但是它有许多强制类型转换的限定和用法,在初步学习编程以前教授这些内容没有太大的意义。
一个例外的情况是,如果你需要检查一个变量是否是一个null或者是一个未定义的值。这可以通过一个简单的someVar == null示例带过,这也是唯一使用==的地方。(另一个例外是在IE中的浏览器bug,用===检查Windows对象总是返回false,但是我们并不会在我们的课程中介绍这个例子。)
Falsy值
和==一样,falsy值也肯能引起混乱。进行严格的布尔检查将减少边缘效应,但是会增加代码量。可以将falsy值限定为布尔值,null和未定义的数值,而将字符串falsy值留给大家以后学习。
其中最有趣的改变是一个很微妙的变换,它避开了创建匿名函数和为他们指定变量时的函数声明。
使用这个技巧能培养一些好的习惯。
块作用域
这是最后一个具有挑战的知识点,目前为止我还没有找到一个特别好的教学方案。光是弄清楚在循环内声明的变量就已经令开发者非常头疼了。如果无法更加直观地解释变量声明的作用域的话,就只能从纯粹的技术角度来解释了。
(但是我还不确定是否应该在一开始就介绍function(){…}();这样的函数块。)
将JavaScript作为第一语言
需要指出的是尽管我们准备将JavaScript作为第一语言——主要是由于它具有普遍性,符合大量工作环境的需求,无需事先安装,开发的内容可以分享——但我们不会将眼光只局限在JavaScript上。还有许许多多的其他语言也是非常重要的,从这些语言里面能学到许多在JavaScript中没有的技巧,我们也应该将这些内容加