javascript全局变量失效

javascript全局变量失效问题:我在js文件中定义了一个全局变量:vara,在函数B()中给a赋值,然后在函数C()中访问a结果发现a居然是undefined找原因:查了不少资料感觉和我的情况都不同,仔细分析了一下,发现了一些端倪:我的操作是这样的,我在A页面中加了iframe,iframe的地址是B,我在A页面中调用了B()函数,然后又在B页面中调用了C()函数。问题就出在这了,javascript的全…

大家好,又见面了,我是你们的朋友全栈君。

问题:我在js文件中定义了一个全局变量:var a,在函数B()中给a赋值,然后在函数C()中访问a结果发现a居然是undefined

找原因: 查了不少资料感觉和我的情况都不同,仔细分析了一下,发现了一些端倪:我的操作是这样的,我在A页面中加了iframe,iframe的地址是B,我在A页面中调用了B()函数,然后又在B页面中调用了C()函数。问题就出在这了,javascript的全局变量的作用范围实际上是只在当前页面起作用(仔细想一下也应是这样,要不然岂不是要乱套了),从这个意义上讲javascript的全局变量也谈不上是全局变量,它只在当前页面中起作用,我们要是把当前页面看做一个类的话,那我们就完全可以把这中全局变量看做为private的。至此,问题原因就很简单了,我在A页面中访问的a变量和我在B页面中访问的a变量中访问的a变来那个并不是同一个变量,就好像是一个类里面的private变量,我在A实例中访问的和我在B实例中访问的并不是同一个变量是同样的道理。

解决: 原因找的了,问题也就好解决了,首先我是在A页面中调用的B()函数,我只要在A页面中调用C()函数,那么A、B函数访问的变量就是同一变量了,那我怎么才能在A页面中调用B()函数呢,我要把B页面当中返回值作为参数传入B函数啊,呵呵,其实方法很简单了啊,只要这样就可以了:我在B页面中写了这么一句:window.parent.C(str)。str为我要返回的值,好了我的问题就这么解决了,就好像是我在B实例中调用A实例的方法,然后传递参数一样,呵呵其实在C#真的很好理解,但在js中就难了点,其实我们可以这么理解,一个js文件就相当于一个类,我们在页面中引用这个文件时就相当于实例化了这个类,那么一切都好理解了。我们写在js文件函数中的变量当然作用域就是这个函数,那我们写在js文件中的变量就相当于我们写在类中的变量,那么它的作用域就是这个类的实例。

 

转载于:https://www.cnblogs.com/baiye7223725/archive/2009/02/07/1385980.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131011.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TLSF算法分析

    TLSF算法分析注:本文的大部分内容摘录自论文《TLSF:aNewDynamicMemoryAllocatorforReal-TimeSystems》,可以通过“科学上网”访问如下链接阅读原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。什么是TLSFTLSF是TwoLevelSegregatedFitmemoryal

    2022年6月30日
    27
  • HttpClient4.X 升级 入门 + http连接池使用

    HttpClient4.X 升级 入门 + http连接池使用转载请注明出处,谢谢~http://blog.csdn.net/shootyou/archive/2011/05/12/6415248.aspx 在一次服务器异常的排查过程当中(服务器异常排查的过程我会另起文章),我们决定使用HttpClient4.X替代HttpClient3.X或者HttpConnection。为什么使用HttpClient4?主要是HttpConnection

    2022年7月22日
    5
  • Verilog语言入门

    基础#号后面加延迟时间,单位为一个单位时间b表示二进制、d表示十进制、o表示八进制、h表示十六进制十进制可以表示0-9,其他三种除了原有的表示外新增了X->逻辑不定态,Z->高阻态Verilog数值集合由:0代表逻辑0或假状态,1代表逻辑1或真状态,X代表逻辑不定态,Z代表高阻态表示格式:<位宽>’<基数><数值&…

    2022年4月6日
    47
  • Stimulsoft 仪表板.JS 2022.2.1

    Stimulsoft 仪表板.JS 2022.2.1Stimulsoft仪表板.JS2022.2.1  二维码视觉设计-使用组件编辑器中的属性定义各种图形元素的颜色和形状。  仪表板的新交互式按钮组件-允许您使用脚本平台语言或Blockly执行脚本。它包括几个可视化设置,这些设置取决于按钮的状态。  仪表板的新卡片组件-此分析组件允许您将数据分组、处理和显示为仪表板中的卡片。它支持所有类型的图形表示,包括集群列、色标、指标、气泡和迷你图。它能够显示文本、数值和图像。  仪表板的新图形堆叠图表类型-此图表用于显示值在整体指标中的

    2022年7月26日
    3
  • 简述django请求生命周期_django批量更新数据库

    简述django请求生命周期_django批量更新数据库Django请求生命周期分析1.客户端发送请求在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都

    2022年8月7日
    5
  • apache 虚拟主机配置详解_linux 配置虚拟主机

    apache 虚拟主机配置详解_linux 配置虚拟主机文章目录Apache虚拟主机企业应用部署一个端口不同域名调试worker工作模式进行压力测试权限设置Apache配置文件详解ApacheRewrite规则讲解Apache配置文件权限操作总结Apache虚拟主机企业应用企业真实环境中,一台WEB服务器发布单个网站会非常浪费资源,所以一台WEB服务器上会发布多个网站,少则3-5个,多则2-30。在一台服务器上发布多哥网站,也称之为部署多个虚拟主机,WEB虚拟主机配置方法有三种:基于单个IP地址多个Socket端口基于

    2022年9月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号