飞起来、享受生活
马上要奔三的年纪,却一直认为生活有无限的精彩,倾心享受生活的每一分钟。

一、JS和C++的区别:

1、C++是静态语言,js是动态语言。区别如下:

静态语言:

  • 在不执行的时候也能够做类型检测,可以一定程度上的检测出一些逻辑错误。但是过多的声明使得程序变得冗余。
  • 编写代码开始的时候就要考虑变量和算式应该是什么类型,有利于编写好的、高可用性的程序。
  • 对编译器提示有作用,同时也对理解代码有作用。

问题:灵活性不够,不定义类型无法写程序。

动态语言:

  • 最大优点是代码简洁。
  • 十分灵活。

问题:运行速度相对会慢一些,要做类型检查。最大缺点是不执行就无法检测出错误。

2、C++是编译型语言,js是解释型语言。

C++的编译过程:预处理->编译优化->汇编->链接。

Js的解析机制:预处理(分段读取代码预处理)->解释执行

3、C++有指针,js无指针。

在C++中的赋值,所有的基本类型都是直接复制,而自定义类型因为有指针的存在,可以自己选择进行深复制(复制)还是浅复制(引用)。而在js中,所有的基本类型赋值都是复制,而所有的其他类型赋值都是引用。

4、js是函数式编程语言,C++不是。

Js把函数当作对象来处理,可以将它当作函数的输入参数和输出值(高阶函数)。

C++如果要把函数当作其他函数的输入参数,即实现高阶函数,必须要通过函数指针(经常还要多传递一个(void *)类型的参数作为参数的函数的参数)。

5、C++的继承是基于类的,js的继承基于原型

在C++中,继承是通过类来进行的。比较符合人的直观思维。同时在生成一个类之后,是不能够对它进行修改了,除非再去修改它的定义。(Ruby基于开放类的继承可以在定义之后任意追加类的内容)

在js中,继承则是通过原型链的方式来进行的。同样也可以在定义之后修改原型链。同时,也可以修改内置类型的原型链来扩展内置类型(慎用,monkey patching可能导致内置对象大幅度修改产生难以预期的行为)。

(JS特性)

6、js的一个重要特性是闭包(当前作用域可以访问并保存外部作用域的变量)。

Js的闭包在函数返回之后,还能够保持闭包引用到的变量不释放。其最大的用途有两个:一是可以函数返回闭包,让外面可以读取访问到函数内的值,二是让这些变量的值一直保存在内存之中不释放。

有闭包很容易实现内部迭代器(each方法),而C++没有闭包,共有循环外部信息比较麻烦,采取的是外部迭代器方法(vector<int>::iterator)。

注意事项:

  • 如果滥用闭包容易消耗大量内存,同时在IE中会有内存泄漏问题,所以在退出函数之前将不使用的局部变量全部删除。
  • 闭包也会在外部改变父函数内部的值,因此用闭包当共有方法的时候要注意不要随便改变内部的值。

7、js可以显示的设置上下文。

Js可以通过applay和call方法显示指定函数内的this。applay参数传递用数组,call参数分开传。

 

二、JS基本数据类型:

Javascript提供五种简单的数据类型,与一种较为复杂的数据类型。

简单的数据类型:undefined、null、boolean、number、string

复杂的数据类型:object

(请参考:http://www.jianshu.com/p/4841fcc6b4e7

三、JS闭包:

http://www.cnblogs.com/winola/p/5678919.html

四、JS中的==和===的区别:

==:比较两个数的返回值看是否相等;

===:比较两个数的返回值和数据类型是否相等

 

 

posted on 2016-07-22 10:32  爱生活的小蜜蜂  阅读(172)  评论(0编辑  收藏  举报