JavaScript变量、作用域和内存题目

1、基础范例和援用范例的值

* 基础范例 : 指的是简朴的数据段,五种基础范例是按值接见的,能够直接操纵保留在变量中现实的值。
* 援用范例 : 指那些能够由多个值构成的对象,援用范例的值是保留在内存中的对象,js不允许直接接见内存中的位置,也就是不可直接操纵对象的内存空间。

操纵对象现实是操纵对象的援用而不是现实的对象,援用范例的值按援用接见。
2、动态的属性
援用范例的值能够增加属性和要领,也能够删除和修正,但基础范例不可。
//援用范例

var person = new Object();
person.name = "sheyurong";
alert(person.name);      //sheyurong

基础范例增加属性也不会报错。
//基础范例

var name = "sheyurong"
name.age = 27;
alert(name.age) ;           //undefined

3、赋值变量值

//基础范例

var num1 = 5;
var num2 = num1;
// num1 与 num2 中的5完整自力,介入任何操纵也不会相互影响

//援用范例

var obj1 = new Object();
var obj2 = obj1;
obj1.name = "syr";
alert(obj.name);   //"syr";
转变个中任一变量也会影响另一个,由于两个变量援用统一变量。

4、通报参数
es中一切函数的参数都是按值通报的,基础范例与援用范例的传介入变量的复制一样。

function setName(obj){
    obj.name = "syr";
    obj = new Object();
    obj.name = "abc"
}
var person = new Object();
setName(person);
alert(person);   // "syr"
//能够把函数的传参设想成局部变量一样

5、检测范例
typeof能够检测基础范例,但检测对象时并不能晓得是什么范例的对象,因而,运用instanceof操纵符。
语法 :

result = variable instanceof constructor
//假如变量为援用范例的实例,则instanceof返回true
例 : person instanceof Object; // person是Object的实例吗?
根据规定,一切援用范例都是object的实例,instanceof检测基础范例,适中返回false,由于基础范例不是对象。

6、实行环境及作用域

* 实行环境决议了变量或函数有权接见的其他数据,决议了她们各自的行动。
* 每一个实行环境都有一个环境变量对象,一切变量和函数都保留在这内里,无法接见,然则背景会运用它。
* 全局变量是最外围的一个实行环境,代码在环境中实行,会建立一个作用域链,用处是保证对实行环境有权接见一切变量和函数的有序接见。
* 作用域链 : 如环境是函数,则最最先只包括有一个变量-arguments对象 -> 外部环境1 -> 外部环境2 ... -> 全局。

作用域链中末了一个对象始终是全局实行环境。

* 内部环境能够经由过程作用域链接见一切的外部环境,外部则不能接见内部。函数参数的接见划定规矩与实行环境其他变量雷同。

7、延伸作用域链

* 运用try-catch语句的catch块;
* with语句 : 

都是会在作用域链的前端增加一个变量对象,with可将制订对象增加到作用域链中。
catch建立新变量,内在跑出的毛病对象声明。

例 : function build(){
    var qs = 'aaa';
        with(location){
            var url = href + qs;
        } return url ;
}
//with吧location对象引入,此种就包括了location中一切属性和要领。










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