先说说JS是容易被误解的语言的观点。从名字上来看,"Java"这似乎暗示着这门语言与Java的关系;好像这门语言是Java的子集,或比Java弱。但实际与Java并无关系,如果说非要有关系,那可以说说一点八卦。当年Netscape确实为了让它快速发展,与Sun公司有过合作;其中为了借大热的Java东风,改名Javascript(原来叫做Livescript).JS第一版仅仅用了10天,未经打磨就广泛使用至今(什么是"网红",这才是"网红")。JS不可避免的有许多设计失误,比如全局变量的设计模式。标准的出现是晚于JS的,而且标准也并不"标准",这导致了许多滥用。由于JS通常是用在web的,从而被认为只能用于浏览器,但它却可以用在服务器等地方的。它的语法类C,但实际上是"披着C外衣的Lisp",是一种面向对象的函数式编程语言。与传统的面向对象的语言相比,它不是基于类的继承,而是基于原型的继承。

公司是不会让人使用语言的每个特性的,我们要使用那部分最可靠、可维护、方便阅读的成熟的子集。

为什么要使用JS?一方面是没有选择;另一方面是这门语言本身有 它自身的优雅、灵活的地方,具有极强的表达能力。

DC认为JS有许多优秀的想法:函数、弱类型、动态对象、字面量的对象表示法。糟糕的想法是:基于全局变量的编程模式。JS是披着C外衣的Lisp(基于lambda演算的语言,与人工智能极为相关)。

强类型语言可以在编译阶段找到程序的类型错误,弱类型做不到;但通常类型错误不是最主要的问题。弱类型可以让人不必疲于应对造型系统。

对象的字面量表示法很好用,DC也借鉴到了JSON中作为一种代替XML通信的数据传输格式。

JS的连接单元是基于全局变量的。编译单元的顶级变量会到全局对象这个公共命名空间。

JS 精粹(一)的更多相关文章

  1. JS精粹(二)

    这章主要讲语法,DC使用了表示形式语法的巴克斯范式图,这的确比语言来得准确简洁.我只想表达一个问题:表达式与表达式语句的关系.因为其他问题很明白. 从DC的巴科斯范式图上大致可以认为,表达式是比表达式 ...

  2. JS精粹:下半部分

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. JS 精粹( 函数)

    函数是对象,它与其它对象唯一的不同是它可以调用.函数可实现:代码复用.信息隐藏.代码组合调用. 建立函数时会建立:上下文.调用函数的代码.每个函数(除Function.prototype)都会有一个原 ...

  4. JS 精粹(三)

    (一)基本问题 JS的数据类型(不是数据结构)分:简单数据类型(undefined\null\boolean\string\number\symbol).复杂数据类型(object). 对象是可变的键 ...

  5. JS精粹知识点和我的解释

    函数若是不return则默认返回undefined const value=()=>{ let a=3; } let value_test; console.log(value(),value_ ...

  6. JS:采摘自JS精粹

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. JS 精粹(方法)

    数组方法: 模拟队列的操作:push()/shift();unshift()/pop();模拟栈操作:push()/pop(); push()返回增加后的长度.unshift也是.pop和shift返 ...

  8. js学习心得(一)(菜鸟)

    js基础已经打了好几次了,慕课跟着学了一遍,视频看了一些,还读了诸如 jsdom艺术,js精粹以及锋利jq(没读完). 这次再次重头读并写一遍代码,工具书是js,查缺补漏高级程序设计第二版,犀牛书有点 ...

  9. 让JavaScript回归函数式编程的本质

    JavaScript是一门被误会最深的语言,这话一点不假,我们看下它的发展历史. 1995年,Netscape要推向市场,需要一门脚本语言来配套它.是使用一门已有的语言,还是发明一门新的语言,这也不是 ...

随机推荐

  1. 网络工程 POST与GET请求方法的本质区别

    POST与GET请求方法的本质区别: 第一:GET用于信息获取,它是安全的(这里安全的含义是指非修改信息),而POST是用于修改服务器上资源的请求 第二:GET请求的数据会附在URL之后,而POST把 ...

  2. spring mvc &lt;mvc:annotation-driven&gt;配置使用出现故障

    我在使用converter进行全局的日期类型转换. 1.写converer public class CustomDateConverter implements Converter<Strin ...

  3. poj 3026 (最小生成树)

    题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...

  4. ExtJs3学习资料分享

    最近在学习EXTJS3,在网上找了一些pdf的书.不过网上分享的有些书都是Ext2.0的.Ext3的比较少.有些书也不全.很多是样章.最近找到一本分享的书<ExtJS源码分析与开发实例宝典> ...

  5. ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

    1.启动报错SQL> startupORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instanceORAC ...

  6. 字符串聚合技术(String Aggregation Techniques)

    from: http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php String Aggregation ...

  7. beforefieldinit释义

    首先让我们认识什么是,当字段被标记为beforefieldinit类型时,该字段初始化可以发生在任何时候任何字段被引用之前.这句话听起了有点别扭,接下来让我们通过具体的例子介绍. /// <su ...

  8. C++ 动态分配类对象

    1.概念 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通 ...

  9. Android 监听网络变化

    Android 监听网络变化

  10. cocos2d-x box2d使用调试绘图

    cocos2d-x box2d使用调试绘图 复制TestCpp的GLES-Render.h和GLES-Render.cpp过来. 添加一个成员变量: GLESDebugDraw *m_debugDra ...