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

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.“标记消灭”是现在主流的渣滓网络算法,这类算法的头脑是给当前不运用的值加上标记,然
后再接纳其内存

    原文作者:rirmk
    原文地址: https://segmentfault.com/a/1190000019424225
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞