我们主要是教授那些已经接受了数学和科学中心课程的学生。因此我们能够做一些更加能激发大家兴趣的练习或是项目。
将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中没有的技巧,我们也应该将这些内容加入到我们的课程中来。
在视频中介绍了更多关于我们选择JavaScript的原因,以及我们开发中支持的浏览器介绍。
我尽量避免跨浏览中出现的各种特殊问题。因此我们会尽量使用现有的库(如绘制canvas或是操纵DOM),只有在与我们最终支持的浏览器一致的情况下才会使用JavaScript语言的功能。
作者简介:John Resig是Open Source的院长,以及Khan Academy的JavaScript开发组长,出版了Pro JavaScript Techniques,他还参与了 jQuery JavaScript library的开发并且担任了领导工作。
目前,John在Boston, MA,并在准备他的第二本书Secrets of the JavaScript Ninja。
原文:http://www.webapptrend.com/2011/12/1245.html
【编辑推荐】