您当前的位置:首页 > 互联网教程

javaScript中的"引用“指什么

发布时间:2025-05-22 00:06:09    发布人:远客网络

javaScript中的"引用“指什么

一、javaScript中的"引用“指什么

1、引用可以理解成"名字"的意思,名字可以找到你,可以代表你,但是你可以改名字,改了名字后,新的名字也是你.

2、比如你的名字叫"张三",你还有一个小名,"小张",这两个名字都可以找到你.

3、找到你之后,再对你进行处理,比如给你捏捏脚,服务一下,你身心舒畅了,有所变化,但是名字没变化.

4、你变化了后,"张三"代表的人,和"小张"代表的人都变化了,因为指向的主体是一个.

5、当然"张三"也可以随时指向别人,这个就类似于this一样.多理解,其实很容易懂.

二、javascript 跨域调用js文件问题...

基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数,代码如下:

<iframesrc=""id="i">

document.getelementbyid('i').oncg=function(){

vard=document.getelementbyid('i').contentwindow;

</html>

页面二代码:

</html>

这时候父页面就可以调用子页面的a函数,实现js跨域访问

这时候父页面就可以调用子页面的a函数,实现js跨域访问

script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签,代码如下

varscript=document.createElement('script');

script.src="*.js";

document.body.appendChild(script);

这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。

这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。

jquery中对jsonp的支持也是基于此方案

这种方式可以解决所有跨域问题,也就是将后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求去访问其它域,再将返回的结果返回给前台,这样做的好处是,无论访问的是文档,还是js文件都可以实现跨域

三、javascript中基本类型和引用类型的区别分析

ECMAScript包含两个不同类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段;引用类型值指由多个值构成的对象。当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值。

Undifined、Null、Boolean、Number和String。这五种基本数据类型可以直接操作保存在变量中的实际值。

上面,b获取值是a值的一份拷贝,虽然,两个变量的值是相等,但是两个变量保存两不同的基本数据类型值。b只是保存了a复制的一个副本。所以,当b的值改变时,a的值依然是10;

下面,两个Boolean变量bl和bl1同样是基本数据类型,同样保存两个不同的基本数据据类型值,bl1保存bl复制的一个副本。

下图演示了这种基本数据类型赋值的过程:

javascript引用数据类型是保存在堆内存中的对象,与其它语言不同的是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能通过操作对象的在栈内存中的引用地址。所以引用类型的数据,在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存在堆内存中的对象。

console.log(obj1.name);//我有名字了