javaScript中的"引用“指什么?

JavaScript010

javaScript中的"引用“指什么?,第1张

引用可以理解成"名字"的意思, 名字可以找到你, 可以代表你, 但是你可以改名字, 改了名字后, 新的名字也是你.比如你的名字叫"张三", 你还有一个小名, "小张", 这两个名字都可以找到你.找到你之后, 再对你进行处理, 比如给你捏捏脚, 服务一下, 你身心舒畅了, 有所变化, 但是名字没变化.你变化了后, "张三"代表的人, 和 "小张" 代表的人都变化了, 因为指向的主体是一个.当然"张三"也可以随时指向别人, 这个就类似于this一样. 多理解, 其实很容易懂.

JS基本数据类型的变量存放的是基本类型数据的实际值;而引用数据类型的变量保存对它的引用,即指针。

JS基本数据类型:null undefined number boolean

string比较特殊

引用数据类型:function object array

var a = 11

var b = 1

b = 12

console.log(a)//11 a的值不会随b值得改变而改变

var a = [1,2,3]

var b = a

a[0] = 2

console.log(b[0]) //2, b的值随着a的值改变而改,因为他们指向同一个内存地址

var a = [1,2,3]

var b = a

b = [11, 12, 13]//b指向了另一个内存地址,与a断开关联

a[0] = 2

console.log(b[0]) //11,b的值不随a的值改变而改变

比如说 var a = 11是基本数据类型,因此变量a存放的就是1这个值

var b = [1,2,3],[1,2,3]是引用数据类型,[1,2,3]是放在内存中的,而变量b存放的是[1,2,3]的地址,而不是[1,2,3]这个值

当使用b这个变量时,js解释器会通过b存放的内存地址,找到内存中的相应地址,将其中的值取出来返回

在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info…")来说,避免书写冗长的console,直接用log("info…")代替,不假思索的会想到如下语法:

1 var log = console.log

2 log("info…")

很遗憾,运行报错:TypeError: Illegal invocation。

为啥呢?对于console.log("info…")而言,log方法在console对象上调用,因此log方法中的this指向console对象;而我们用log变量指向console.log方法,然后直接调用log方法,此时log方法的this指向的是window对象,上下文不一致,当然会报错了。

此时我们可以用bind方法解决这个问题。bind方法允许手动传入一个this,作为当前方法的上下文,然后返回持有上下文的方法,例如:

1 var log = console.log.bind(console)

2 log("info...")

这样就不会报错了。