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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring事务隔离级别与数据库隔离级别不一致时,该以谁为准?

    Spring事务隔离级别与数据库隔离级别不一致时,该以谁为准?项目中,以Spring事务为准,因为他重写了数据库的隔离级别,但没有直接修改数据库的隔离级别

  • pycharm mac 激活码【2022.01最新】2022.03.12

    (pycharm mac 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1M2OME2TZY-eyJsaWNlbnNlSWQi…

  • 生成条形码_条形码在线生成器

    生成条形码_条形码在线生成器1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Web;5using

  • Python——因子分析(KMO检验和Bartlett’s球形检验)「建议收藏」

    Python——因子分析(KMO检验和Bartlett’s球形检验)「建议收藏」因子分析用Python做的一个典型例子一、实验目的采用合适的数据分析方法对下面的题进行解答二、实验要求采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者。三、代码importpandasaspdimportnumpyasnpimportmathasmathimportnumpyasnpfromnumpyimpor…

  • 黄聪:使用srvany.exe将任何程序作为Windows服务运行「建议收藏」

    黄聪:使用srvany.exe将任何程序作为Windows服务运行「建议收藏」srvany.exe是什么?srvany.exe是MicrosoftWindowsResourceKits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行。也就是说srvany只是其注册程序的服务外壳,这个特性对于我们来说非常实用,我们可以通过它让我们的程序以SYSTEM账户启动,或者实现随机器启动而自启动,也可以隐藏不必要的窗口,比如说控制台窗口等等。如何获…

  • C#FindWindowEx参数详解

    C#FindWindowEx参数详解FindWindowEx参数详解本函数的其他内容在网络上都比较多,这里主要说一下它的参数设置和搜索结果的区别。函数功能:在窗口列表中寻找与指定条件相符的第一个子窗口。该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。函数原型:HWNDFindWindowEx(HWNDh

发表回复

您的电子邮箱地址不会被公开。

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