本文假设读者熟悉C/C++语言, 如果你不熟悉, 那么你可以忽略C/C++部分的论述, 只看JavaScript的部分就可以了, 这篇文章是笔者学习JavaScript语言时候的一些知识点.
JavaScript给笔者的印象一直是面向对象, 一切皆是对象, 包括函数. 我们可以给方便的给对象赋一个函数值, 于是它就成为了一个函数, 可以被呼叫执行. 但是, 事实上, 函数不过是一个指针, JavaScript对象只不过能够接受一个函数指针, 这是C/C++语言也具有的特性. 一般来说, 函数在内存里面只有一个拷贝, 即使对JavaScript来说也是如此.
JavaScript一切都是对象, 事实上, 脚本语言的变量无类型是一种假象, C/C++也有variant类型, 可以接受各种类型的赋值, JavaScript只不过语言预置了这种类型, 这个类型可以保存各种不同类型的数据. 事实表明, 即使放弃C++自由的自定义类型方式, 我们仍然能够做同样的事情, JavaScript就是如此. 使用一个或几个预制的类型, 我们完全可以构造各种数据结构, 因为即使是C++的类定义, 最终的类型还是那几种预定义类型, 复杂类型是简单类型的组合而已. JavaScript把预制类型减少到很少, 字串,数字,函数,对象, 而且你一般没有必要就不用管它是哪种类型, 最重要的是, 你不用像C/C++那样因为不同类型的变量不能互相赋值而造成不方便, JavaScript能完成大多数类型的自动转换.
JavaScript的变量无需声明就可以使用, 但是其实这是个误解, 任何脚本语言的变量都是需要声明的, 与其说不用声明, 准确的说是利用赋值语句来声明一个变量. 而且很多时候, 我们确实需要声明一个变量, 但是留待后面再赋值, 所以没有声明关键字的脚本语言, 使用起来多少有些不便, 你可能不得不给一个变量赋一个不必要的值, 来声明它. 而既没声明, 也没赋值的变量, 如果直接使用, 都会提示未定义的语法错误.