JavaScript--你不知道你不知道

来源:互联网 发布:网络空间安全委员会 编辑:程序博客网 时间:2024/04/28 12:23

原文地址:http://www.w2lessons.com/2011/04/you-dont-know-javascript.html

译文:

             下这篇文章的原因是因为几乎所有的web开发者都会或多或少的接触JavaScript。但是大部分人学习JavaScript的方法只是一遍一遍的复制粘贴代码样例,对于           JavaScript语言本身却缺少深入的理解。这种学习方法所产生的问题是,开发者其实从没有学习过语言本身,却错误地认为他们懂得JavaScript。在我自己对于JavaScript的学习过程和这么多年的工作中,我所发现的是:直到你对JavaScript真正懂得之前,你不知道其实你不知道。这有点绕,其实说白了,就是你需要有一个人告诉你你不懂得JavaScript,而且你需要好好地去学习一下。我常常面试一些将JavaScript作为自己优势的人,其实他们只是将代码示例中的代码片段进行一些简单的组装而已。知道如何使用框架例如jQuery或Dojo是非常好的,但是如果你不能对于他们背后的JavaScript有深刻的理解的话,是无法称为这些框架中的专家的。为了展现JavaScript中的一些元素,我把它的概念按我的理解分成了基础、中级、高级:

            对于JavaScript的初级理解包括:

  • 掌握基本的编程工具符号,比如,循环,if语句,try/catch语句等等
  • 掌握函数的定义,以及多种不同的定义和调用形式,包括匿名函数
  • 理解基本的作用范围,全局作用域和对象作用域(闭包除外)
  • 理解上下文的作用以及“this”变量的使用
  • 掌握不同的对象的实例化方式,以及对象和函数的声明方式
  • 掌握JavaScript的比较预算符,像'<', '>', '==', '===',知道那一种使用方式是正确的,包括对象和字符串是怎么比较的和类型转换
  • 掌握对象属性和方法的数组索引以及这与真正的数组有什么不同(对象迭代和数组迭代)

对于JavaScript的中级理解包括:

  • 掌握timer,它是如何工作的以及何时/怎样可以和匿名函数的执行一样有用
  • 深入理解函数回调(callback)以及函数的应用,像call()和apply()方法(controlling context and function argument passing)。
  • 掌握JSON标记,以及”eval“函数
  • 理解闭包以及它是怎样影响你的代码的表现,以及怎样用它创建私有变量以及可爱的(function(){})()调用
  • AJAX和对象链
对于JavaScript的高级理解包括:

  • 掌握函数形参变量以及怎么通过参数的长度以及arguments.callee的递归调用来使函数溢出。
             必须注意ECMAScript 5严模式下不支持arguments.callee调用,虽然jQuery(到1.4)和Dojo很好的使用了它
  • 高级闭包,像self-memoizing functions, currying, and partially applied functions
  • 函数和html原型,原型链以及怎样使用基类和函数来缩减代码
  • 对象的类型以及instanceof 和 typeof的使用
  • 正则表达式以及表达式编译
  • with语句以及你为什么要使用它们
  • 最困难的部分:知道如何使用这些工具编写出简洁,健壮,快速,可维护性以及跨浏览器兼容的代码
         高级部分的最后一点尤其重要,也是最难以达到的。考虑到JavaScript宽松的特性,你的代码很容易就变得像不可维护的意大利面条一样。一旦你学到了JavaScript

语言本身,你就可以熟练地将一个大的应用整理成一个紧致的,易于维护的结构。这需要多年的训练,这在书上学不到。我自己每天都会有几个小时的时间来使用JavaScript,这已经持续了很多年,而且仍旧在寻找比较好的组织和编写代码的方法。就因为这样,直接跳到对于框架的学习是危险的,因为jQuery容易变得不可维护。Dojo对此提供了一些帮助。

        考虑到JavaScript已经嵌入到后端,比如Node.js。我决定将上面的要求从特定的web应用中孤立出来。是web方面的应用比如DOM和IE是JavaScript得到了一个坏名声。这就是说,如果你想将JavaScript用于web,那么你需要知道其他的一些东西。

  • DOM以及用一种有效的方式来操作它,比如添加,删除和改变节点,以及处理文本节点。This includes minimizing browser re-flows through the use of tools such as document fragments. 
  • 跨浏览器的方式从DOM中提取信息,用框架可以很好的解决这个问题,然而知道在特定的CSS和style tag上提取信息的差别等等
  • 跨浏览器的事件句柄,事件绑定和解绑定,bubbling,怎样达到理想的callback context。同样的,利用框架,这些很容易达到,但开发者必须明白IE与W3C标准浏览器之间的区别
  • Expados vs. attribute setting, the performance differences between them, and the naming discrepancies that exist 
  • 利用正则表达式来进行DOM节点的抽取
  • Effective browser functionality detection and graceful degradation 
        从上面的列表你可以看出,JavaScript不仅仅是alert(myVal) and myBtn.onclick = ...你可以拷贝和粘贴,但是要想成为一个真正的JavaScript程序员,你必须阅读和训练。推荐两本书'JavaScript: The Good Parts'和 'Secrets of the JavaScript Ninja'。JavaScript是最容易接触的语言,因为每个人都有浏览器,几乎不用安装额外的什么。创建一个html文件,开始实验上面所提到的吧。对于简历,如果你已经掌握了初级阶段,而且正向中级阶段迈进,那么把JavaScript写进你的简历中吧!一旦你发现自己能够写出想要的函数而不是拷贝粘贴时,呢么你可以宣布自己已经掌握JavaScript,在此之前不要这么说。

If there are any aspects of JavaScript that I've missed please chime in, in the comments section. Also please share any experience you've had with people claiming to know JS or other languages.

It should be noted that I am not a front-end developer, I'm a back end developer that has evolved into a full-stack developer. Today almost every back-end developer needs to learn JavaScript and that is what this article is meant to encourage. It's not meant to sound condescending as I hardly claim to know everything there is to JS. What I would like to see is more people realize that JavaScript is a vast and powerful language, and that there is more to it than initially meets the eye. 


--------------------------------

最近在学JavaScript,犀牛书!!JavaScript的动态性好大,关于类的真是神奇!!

原创粉丝点击