C++与javascript对⽐
接触javascript应该有三个⽉了,但是⼀直没有认真去学习这门语⾔的⼀些特性,现在结合C++的语⾔特性来分析⼀下,对⾃⼰脑海中的知识做个总结。
1、C++是静态语⾔,js是动态语⾔。区别如下:
js原型和原型链的理解静态语⾔:
1.在不执⾏的时候也能够做类型检测,可以⼀定程度上的检测出⼀些逻辑错误。但是过多的声明使得程序变得冗余。
2.编写代码开始的时候就要考虑变量和算式应该是什么类型,有利于编写好的、⾼可⽤性的程序。
3.对编译器提⽰有作⽤,同时也对理解代码有作⽤。
问题:灵活性不够,不定义类型⽆法写程序。
动态语⾔:
1.最⼤优点是代码简洁。
2.⼗分灵活。
问题:运⾏速度相对会慢⼀些,要做类型检查。最⼤缺点是不执⾏就⽆法检测出错误。
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)。
注意事项:
1.如果滥⽤闭包容易消耗⼤量内存,同时在IE中会有内存泄漏问题,所以在退出函数之前将不使⽤的局部变量全部删除。
2.闭包也会在外部改变⽗函数内部的值,因此⽤闭包当共有⽅法的时候要注意不要随便改变内部的值。
7、js可以显⽰的设置上下⽂。
Js可以通过applay和call⽅法显⽰指定函数内的this。applay参数传递⽤数组,call参数分开传。
(未完待续)
上述浅薄个⼈看法,如果有错误希望⼤家能够指正。
2011-10-15 02:42
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论