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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vscode写前端代码要装什么插件_AE必备插件

    vscode写前端代码要装什么插件_AE必备插件本篇文章先介绍下常见的插件,如果本文对你有所帮助请三连支持博主,你的支持是我更新的动力。vscode之所以被称为宇宙第一神器(虽然我喜欢用HBuilderX),其中丰富的插件功不可没,安装起来超级简单,给我们开发带来了极大的便捷。注意,新手学习期间,不建议安装t太多的插件,用到啥就安装啥。因为有些插件会到vue学习的时候引起冲突,所以这里就介绍几个常用的插件。vscode刚下载完毕是语言英文的,要先安装这个插件,把语言改为中文版,所以是我们第一个安装的插件就是他想必各位大佬也都用。修改开始标签,结束标签

    2022年9月30日
    1
  • Linux内核解压

    Linux内核解压linux内核解压说明:首先下载内核linux-4.12.4.tar.xz然后下载工具7z.rar然后用winrar解压7z.rar然后安装7z然后用7z解压linux-4.12.4.tar.xz得到linux-4.12.4.tar最后用winrar解压

    2022年7月23日
    10
  • 对象转json忽略空参「建议收藏」

    对象转json忽略空参「建议收藏」有时候我们在传json的时候需要过滤掉那些数据为空的参数,我们可以这样:JsonUtil.object2JSON(request,SerializerFeature.WriteDateUseDateFormat); 当然,也可以这样:JSON.toJSONString(request)这两种方式都需要添加阿里的jar包<dependency> <gr…

    2022年9月16日
    0
  • ExtJs_FileUpLoad的那些花样作死法

    ExtJs_FileUpLoad的那些花样作死法

    2021年9月3日
    48
  • Java使用RSA加密解密签名及校验

    Java使用RSA加密解密签名及校验

    2021年4月9日
    156
  • linux testdisk使用教程,使用TestDisk恢复因安装Ubuntu导致的硬盘误格

    linux testdisk使用教程,使用TestDisk恢复因安装Ubuntu导致的硬盘误格前几日心血来潮想把家中的旧笔记本换成 Linux 操作系统 算是在业余生活中正式投入 Linux 的怀抱 说干就干 发行版选择了 Ubuntu 下载了 Ubuntu16 04 的 ISO 下载软碟通 制作成 U 盘启动 恩 重启电脑 U 盘引导 进入安装界面 恩 安装界面挺炫酷啊 还检测到硬盘中安装的 Win8 恩 问我是与其他系统共存还是清除并安装 既然都正式投入怀抱了 肯定只安装 Ubuntu 啊 Win8 拜拜了 恩

    2025年6月24日
    0

发表回复

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

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