JavaScript 通俗理解

JavaScript是什么

JavaScript是一种广泛应用的通用编程语言,在服务器端,浏览器端,桌面端都有应用。
服务器端:nodejs
浏览器端:操作网页
桌面端:nodejs-webkit等

本文写作目的

记录学习JavaScript过程中的所思所想,帮助人们快速入门这门语言。

作者背景

编程爱好者,熟练掌握C/C++,Java编程,Python编程,SQL操作

JavaScript特点

  1. 脚本语言,JavaScript直接解释运行,他没有编译环节;
  2. 动态类型,JavaScript中没有C++和Java传统的类型概念,他的内部所有的变量类型都是可变的;
  3. 函数作用域,JavaScript中的变量基于函数作用域,没有块作用域概念;
  4. 基于原型,JavaScript没有传统的继承概念,他的所有类型都拥有一个原型对象,所有类型通用的属性和方法都是定义在原型上的;

脚本语言

JavaScript是一种脚本语言,不存在编译过程,直接解释执行。类似的语言还有Perl、Lua、Python和TCL等。
脚本语言的特点就是不用编译,直接解释执行,优点就是修改程序迅速,无需编译,迅速执行。如传统C++程序,如果某个文件进行了修改,那么所有引用此类型的文件都需要重新编译,如果项目足够大,那么这个时间可能回很长,而且编译型语言都需要编译环境,和运行环境不同,这个环境可能很复杂,很庞大,一般在运行的机器上是没有这种环境的。那么如果运行环境中出现问题,程序的定位排故就很麻烦,需要到开发机器上面模拟错误条件,修改程序,上传运行环境等操作。而解释性语言开发环境和运行环境是一致的,标志着可以直接在运行环境上进行修改。
当然解释性语言的缺点也很多,最主要的就是运行速度慢。JavaScript速度再快也没有C++程序快,没有Java程序快。

动态类型

JavaScript是一种动态类型,所谓动态类型意味着程序中变量的类型随时可能发生变化,因此程序遵循这一种鸭子类型的概念,那就是不惯这个类型的实际类型是什么,只要他能呱呱叫,那么我就认为他是鸭子。
一般来说,我们在程序中使用的所有变量都只是一个指示器,他指引我们如何去搜索内存中的对象实例,实际所有的操作都是通过变量取寻找对象实例,然后再对象实例上面操作。
对于Java和C++来说,变量在声明的瞬间他的类型信息就已经确定了,也就是标明今后能够引用实例的种类,超过此范围就会报错;
而Python是基于调用的,在Python程序的每次调用中,此参数的作用范围内,类型信息也就固化了。也就是当程序运行到指定程序段中,一个参数的类型根据绑定的对象实例进行初始化,如果下次传进来的是其他类型,那么这两次的调用,该参数类型是不同的。
对于JavaScript来说,我不管你是什么类型,我都能绑定,我也不管你是什么作用范围,只要给我赋值我都敢引用。
对于Java等语言中,一个对象的构建是根据类定义的模板进行初始化的过程,实例构建完成之后这个类型的属性和方法也就固定了,不可更改。但是在Python和JavaScript中,不仅参数类型是动态的,实例的类型也是动态的。调用者可以根据需要自行添加和删除实例中的任何属性和方法而不会因此任何报错,他只会在未来访问这个属性的时候崩溃给你看。

函数作用域

JavaScript中凡是使用“var”声明的变量,他在整个函数作用范围都是可用的,也就是类似static变量在C语言中的作用,只不过C语言中作用范围是整个文件,而JS是整个函数作用域。在新版本的JS中还可以使用let和const,let类似于传统的变量定义,const就更好理解了。
JavaScript中函数中可以如同Java语言一样定义var变量,可以执行代码片段,除此之外还可以用function在函数内部定义函数,定义的函数也仅仅是定义,如果没有显示调用这些函数是不执行的。而这些定义在函数内部中有意义,也仅仅在函数中有意义,在函数外面你是访问不到的,如果需要在外部访问你可能需要构建一个对象.

基于原型

因为JavaScript是一种基于原型,基于函数的语言。函数在他的内部是一等公民。所有的一切都是通过函数来实现的,那么为了模拟模板功能,他引入了prototype概念。
在JavaScript中函数和变量的处理很类似,函数中变量只是一个索引,他指向真正的实例,所有操作都是在实例上进行的。而函数也相当于一个索引,它直接指向一个prototype实体,这个实体用于保存状态,可以在函数中利用this来访问函数绑定的实体,为实体添加属性。如果使用var和function声明,那么这些参数和方法仅仅属于代码段和堆栈,等除了函数之后这些就会销毁。如果在this上注册函数和参数,那么在函数构建的实例上就可以访问。
任何一个函数都可以通过new来构建一个实例,这个实例构建出来后JavaScript会为他保存prototype实体,我们就可以访问在该函数中为他的prototype注册的属性和方法了。如果没有采用new构建一个实例,那么这仅仅是一个普通的执行过程,在这个过程中JavaScript可能创建了prototype实体,然后执行完成之后,又销毁了这个实体。
所以JavaScript的继承其实就是不停的在Prototype上注册属性和方法的过程罢了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值