资讯专栏INFORMATION COLUMN

JavaScript红宝书笔记(四)---变量、作用域和内存问题

imtianx / 2978人阅读

摘要:在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。标记清除是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后再回收其内存

1.在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。

2.当从一个变量向另一个变量复制引用类型的值时,两个变量实际上将引用同一个对象,因此,改变其中一个变量,就会影响另一个变量。

var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name); //"Nicholas"

3.访问变量有按值和按引用两种方式,而参数只能按值传递;
在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量,即命名参数;
在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部;

function setName(obj) {
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"

上面实例代码,person变量将内存地址作为值传递给setName参数。第一次给obj变量添加name属性是在person对象的内存地址基础上添加,之后重新赋新对象给obj变量,该对象为局部对象,内存地址与person对象并不相同,所以第二次添加name属性并不会影响person属性。也证明了参数传递方式为按值传递。

4.检测基本数据类型可以使用typeof;检测引用类型使用instanceof;

alert(colors instanceof Array);

5.JavaScript没有块级作用域,也就是for循环、if语句等{}并不会拥有自己的作用域,所以在这些语句中定义的变量,在外部执行环境中也是可以被访问的。

for (var i=0; i < 10; i++){
    doSomething(i);
}
alert(i); //10

6.“标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然
后再回收其内存

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104543.html

相关文章

  • 宝书笔记-第4章-变量作用域和内存问题

    showImg(https://segmentfault.com/img/bVbwfHP?w=1919&h=2347);

    nemo 评论0 收藏0
  • 【进阶2-2期】JavaScript深入之从作用域链理解闭包

    摘要:使用上一篇文章的例子来说明下自由变量进阶期深入浅出图解作用域链和闭包访问外部的今天是今天是其中既不是参数,也不是局部变量,所以是自由变量。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周正式开始前端进阶的第二期,本周的主题是作用域闭包,今天是第7天。 本计划一共28期,每期重点攻克一个面试重难点,如果你还不了解本进阶计...

    simpleapples 评论0 收藏0
  • JavaScript高级程序设计》笔记变量作用域和内存问题

    摘要:局部变量只在函数执行过程中存在。此时,局部变量就没有存在的必要了,因此可以释放他们所占的内存以供他们使用。引用计数的含义是跟踪记录每个值被引用的次数。这一做法适合于大多数全局变量和局部变量的属性。 基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型的值指那些可能有多个值构成的对象。 动态的属性 ...

    Zack 评论0 收藏0
  • 【进阶2-1期】深入浅出图解作用域链和闭包

    摘要:本期推荐文章从作用域链谈闭包,由于微信不能访问外链,点击阅读原文就可以啦。推荐理由这是一篇译文,深入浅出图解作用域链,一步步深入介绍闭包。作用域链的顶端是全局对象,在全局环境中定义的变量就会绑定到全局对象中。 (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue、React、Node源码和实战、面试指导) 本周开始前端进阶的第二期,本周的主题是作用域闭包,今天是第6天。 本...

    levius 评论0 收藏0
  • Effective JavaScript读书笔记(二)

    摘要:尽可能的使用局部变量,少用全局变量。正确的实现就是在函数体内部使用将声明成局部变量。在新特性中,引入了块级作用域这个概念,因此还可以使用,来声明局部变量。它们共享外部变量,并且闭包还可以更新的值。 变量作用域 作用域,对于JavaScript语言来说无处不在,变量作用域,函数作用域(运行时上下文和定义时上下文),作用域污染等等都跟作用域息息相关,掌握JavaScript作用于规则,可以...

    Yuqi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<