登录 | 注册

优就业JS教程-JavaScript 中变量、作用域和内存问题的学习

首页 > Web前端 > JS 2016-10-17 11:40:10 浏览次 共 条评论

收藏赞(分享

就本篇博客,主要学习总结一下最近学习到的JavaScript的知识,其中有些是网络上的,不过对于理解JavaScript,和在工作总是会很实用的,所以总结了下来:

那么就开始吧,首先是变量

在JavaScript中变量分为两种:一种是基本类型,基本类型值在内存中占用固定大小的空间,因此被保存在栈内存中。从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本。另一种类型则是引用类型,引用类型的值是对象,保存在堆内存中,对象的引用保存在栈中。包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向对象的指针,从一个变量向另一个变量复制引用类型的值,复制的是指针,最终指向同一个对象。

那么在实际的使用中要确定一个值是那种基本类型的可以使用typeof操作符,而确定一个值是哪种引用类型则需要使用instanceof 操作符。

基本数据类型:undefined、Null、boolean、number和String

引用类型:Object、Array、Date、RegExp、Function、基本包装类型、单体内置对象(Gloabal、Math)。关于引用类型各个类型的详细使用,下次再详细描述。

JavaScript是面向对象的语言,同样支持继承,只是JavaScript支持实现继承,不支持接口继承。

JavaScript是一种非强类型的语言,不需要严格的如同Java、C等语言的声明类型然后复制,也一定要赋值声明类型的值。JavaScript有两种值类型,所以涉及到两个地方复制,一种就是复制变量值,另一个则是方法调用的时候存在参数传递赋值。基本类型是值复制,引用类型复制是对象的引用。

作用域

js中没有块作用域的概念。在没有var进行声明则会生成为全局变量污染全局环境。所以在实际的使用过程中,一定要记得var,js对变量的搜索是一层一层往上搜索,如果搜索到变量则停止往上搜索(所以搜索变量的层次越多肯定会小小的影响程序性能)。

延长作用域链

虽然执行环境的类型总共只有两种--全局和局部(函数),但还是有其他办法来延长作用域链。这是因为有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。那么具体是哪写情况呢?具体就两种:

(1)、try-catch 语句的catch块。

(2)、with语句块。

这两个语句都会在作用域链的前端添加一个变量对象。对with语句来说会指定对象添加到作用域链中。对catch语句来说,会创建一个新的变量对象,其中包含的是被抛出的对象的声明。所以在try-catch 和with要慎用,with是不推荐使用的。在严格模式下,是不能使用,但是我们要对with有一些了解。用一个例子解说:

with(location){

var qs=search.substring(1);

var hostname=hostname;

var url=href;

}

href 和hostname 都是location.hostname 和location.url

好了,稍后来说一下JS的执行环境,js的执行环境是很复杂的,我肯定也是不能全部说清楚的,下面就根据我所了解的简单总结了几个重点,后期了解到更多后,在加入到本次的博客中。

免责声明:本文来源于博客园,由网友提供或网络搜集,仅供个人研究、交流学习使用,不涉及商业盈利目的。如有版权问题,请联系本站管理员予以更改或删除。优知网会定期发布Web前端相关趋势文章,包括 Web标准 HTML5 CSS JS JQuery Ajax 网页特效 等领域,敬请关注!

分享到
人收藏5 收藏
 
我要评价
相关文章
优就业JS教程-12个非常实用的JavaScript小技巧
优就业JS教程-12个非常实用的JavaScript小技巧
优就业JS教程-JavaScript最佳实践:性能
优就业JS教程-JavaScript最佳实践:性能
优就业JS教程-JS获取屏幕高度
优就业JS教程-JS获取屏幕高度
优就业JS教程-JS
优就业JS教程-JS
 
 

咨询中心

优就业微信扫一扫
微信扫一扫

400-650-7353

加入官方微博