javascript的引用类型

简介
1。引用类型(引用类型)
引用类型是Javascript中的一种内部类型,它主要用作替代物,而不是变量或函数,当然,当需要实际值时,它可以通过它找到真正的值。

2。引用类型结构
引用类型的值由两部分组成。一种是引用类型的值,该引用类型引用对象的对象。这里我们称它为基,两个是基中引用对象的对象名称:

复制代码代码如下所示:
无功valueofreferencetype = { {
基地:,
PropertyName:
};


三.使用场景
引用类型的使用场景是两个:

(1)处理标记时

标识符是一个变量名、一个函数名、一个函数参数名和一个全局对象中的未识别的属性名。

(2)在处理一个属性访问器

复制代码代码如下所示:
var = 10;
函数(bar){ }


在操作的中间结果中,引用类型对应。

复制代码代码如下所示:
无功fooreference = { {
基地:全球,
属性名:'foo
};

无功barreference = { {
基地:全球,
属性名:'bar
};


还需要解释,在Javascript中,所有对象或函数都属于对象。阅读我文章的人都知道,在每一个执行上下文中,都有一个变量对象,专门用于在这个执行上下文中管理变量或函数。

因此,当指示器被加工时:

在全球背景下,毫无疑问,基地= globalvo =全球

在执行上下文函数中,基=

但是处理对象属性是:

这是一个简单的,owerobject基地=

4。获取引用类型的真正值。
起初,我们说引用类型只是一个引用,而不是它不保存真正的值,当需要一个真实值时,它可以通过一系列内部算法得到,这个算法可以用简单的伪代码来描述:

复制代码代码如下所示:
功能是(价值){

如果(类型(值))!=引用){
返回值;
}

VAR方法= getbase(价值);

如果(基=空){
把新的referenceerror;
}

返回基地。{ {有} }(getpropertyname(值));

}


{ {有} }内部方法返回真值的对象属性,包括从原型链继承的属性分析,我们可以很容易的引用类型通过GetValue的真正价值。下面的例子如下:

复制代码代码如下所示:
GetValue(fooreference); / / 10
GetValue(barreference); / /函数对象吧


我们什么时候需要获得引用类型的真正值

在一般情况下,需要指定一个值是一个引用类型,参与经营,或是通过GetValue方法得到真正的价值。(注:通过GetValue对象不再是一个引用类型)

引用类型与此之间的关系
引用类型主要与函数上下文中的方向有关,并且在不同的时间看起来非常不同。我们只绘制引用类型来解释函数上下文中的性能。

在函数上下文中确定这个值的一般规则如下:

在函数上下文中,这是由调用者提供的,并由调用函数的方式决定。如果引用类型的值在括号()的左侧调用,则会将其设置为引用类型值(基对象)的基对象。在其他情况下,该值为空。然而,没有事实,该值为空,因为当该值为空,它的值是隐式转换为一个全局对象。注意:在ECMAscript第五版,不强制转换为一个全局变量,但是分配一个值定义。

这里我们讨论括号的左边有三种不同的情况。

(1)调用括号左边的引用类型的值是引用类型的值。

这不需要太多分析,而基本对象是这个值,并且找到基础。如果它在一个全局变量下声明,它指向全局对象。

复制代码代码如下所示:
VaR MyObject = { {
函数(){
console.log(本);
}
}

(MyObject。Foo); / /毫无疑问,foo基地MyObject,所以在这个MyObject foo方法。


(2)调用括号的左边是引用类型的值,但是这个值是空的。

复制代码代码如下所示:
函数myFunction(){
函数(){()
console.log(本);
}
富;
}

(myFunction); / /输出:窗口:窗口,窗口:{顶窗…}


当一个函数被调用时,基地内部的功能应该在对象上下文的当前执行(OA),但在Javascript在OA为基础,为null,Javascript这空当然不允许的情况下,都将被设置为全局对象(这是错误的设计上面这个函数呼叫模式的来源),所以在这种情况下,这一点对全局对象。

(3)调用括号左边的值不是引用类型的值。

复制代码代码如下所示:
简单的例子
(函数(){())
console.log(本); / /空= >全球
});

一个更复杂的示例
var { { { {
函数(){
console.log(本);
}
};

(foo,bar); / /参考,好= foo
((bar))

(foo.bar = foo,bar)(); / /全球
(假)| |(foo,bar); / /全球
(foo.bar,foo,bar)(); / /全球


当调用括号的左边不是引用类型,而是其他类型时,这将自动设置为null,结果是全局对象。

在第一个例子中,直接函数,在左边调用括号的函数是表达式,而不是引用。

第二个例子要复杂得多,我们必须分析每一个。

foo.bar(),这没有疑问的基础是foo,这指向Foo。

(Foo,吧)(),其中括号的使用,作为一种分组符号,即,它不强制执行GetValue方法的引用类型。其执行结果与上面完全相同。

在后三中,括号依次赋值、操作或逗号操作。他们都力参考类型执行GetValue方法,以便返回一个函数对象,函数调用的左括号不再是一个引用类型,和所有,这是针对全局对象。

总结

一个参考类型,但我始终不明白这一点,只是看到了汤姆叔叔的博客那一章,为了解释这个模式在价值原则上的调用和具体分析,这种分析不能,我以前看到过的引用类型和引用值不应该存在一些关系。想想吧,叔叔的博客是用来帮助理解这一点。至于两者之间的关系,如果到底有什么关系,它将继续研究。

我希望你能多交流,谢谢汤姆叔叔。