jquery的$(document).ready()中定义变量的范围问题

问题描述

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Hello World</title><script type="text/javascript" src="../scripts/jquery-1.4.4.js"></script><script type="text/javascript" src="../scripts/scope1.js"></script><script type="text/javascript" src="../scripts/scope2.js"></script></head><body><p>this page test scope.</p></body></html>$(document).ready(function() {alert("scope1.js...");var wahaha = "kyfxbl";});$(document).ready(function() {alert("scope2.js...");alert(document.wahaha); alert(window.wahaha);});请教一下,看我贴的代码,应该能明白我的意图了。我在scope1.js中定义了一个wahaha变量,在scope2.js中就取不到了,无论是用window.wahaha还是document.wahaha,都打出undefined。因为我对闭包的概念和jquery的源码都不太了解,所以搞不懂这个问题。请指教。究竟$(document).ready(fn);中定义的变量或者函数,是在什么地方呢?跨文件怎么才能取到呢?如果能简要讲解一下原理就更好了,谢谢。

解决方案

var wahaha = "kyfxbl"; 是函数内的局部变量了, 放到window作用域下就可以了, 比如去掉var wahaha = "kyfxbl"
解决方案二:
由于两个$(document).ready异步,所以你不知道谁先执行或谁先完成。那么无论如何,将wahaha放在任何一个地方都是错误的,即使执行成功也有异步的风险。唯一的可能是将var wahaha = "kyfxbl"; alert(wahaha); 放在一个文件里。否则,将之放在全局变量里,甚至任何一个能够共享的变量里。但先保证程序执行是同步的

时间: 2024-09-11 11:36:20

jquery的$(document).ready()中定义变量的范围问题的相关文章

如何在smarty模板中定义变量与常量

  定义常量非常的简单 方法是:  代码如下   {$smarty.const.你定义的常量名} 定义变量如何做呢? smarty中定义变量 . {*下面的这一段相当于在模板内部定义一个变量UserName*}  代码如下   {assign var="UserName" value="myz"} 这里将显示模板内部定义的一个变量:UserName = {$UserName} 例子  代码如下   <*assign var="i" valu

ios-新手上路:各位:oc在.m的@implementation中定义变量有什么不同呢?

问题描述 新手上路:各位:oc在.m的@implementation中定义变量有什么不同呢? oc :各位:在.m的@interface是类扩展,可以在里面定义不对外公布的属性便量,那么在.m的@implementation中定义变量的作用是什么呢 解决方案 难道是无法被self指定非指针全局变量?嘻嘻 不是我说,兄弟,很少这样用 implementation里面就写方法就好了,成员变量全部用property声明 解决方案二: 相当于私有的全局变量

关于function类中定义变量this的简单说明_javascript技巧

关于function类中定义变量this的简单说明 <!DOCTYPE html> <html> <head> </head> <script> function TObject(){ this.name1 = "aa";//这里不能写name,name是window的变量.否则无法得到验证结果 } var t = new TObject();//执行中,this代表t alert("window1="+t

c++-C++内层循环中定义变量和在外面定义比影响大吗

问题描述 C++内层循环中定义变量和在外面定义比影响大吗 例如: for(int i=0;i<999;i++){ for(int j=0;j<999;j++); } 内层循环每次都定义j会造成多大的消耗呢 解决方案 这个需要看你具体用什么编译器.不过主流编译器(如vs和gcc)这一块优化都比较好,不会反复分配变量. 解决方案二: 以前我也有过这种担心,不过现在看完别人的评论,我有点豁然开朗了,在内层循环中定义变量到底会不会存在重复分配的问题,这涉及到编译器的优化. 解决方案三: 这种基本可以忽

c#-C#中在类中定义变量,为什么不能赋值textbox的值

问题描述 C#中在类中定义变量,为什么不能赋值textbox的值 static int i=convert.toint32(textbox1.text); 这是在类中定义的,但是报错,非静态定义 解决方案 因为textbox1不是静态的,所以不能访问,去掉static 解决方案二: static赋值的变量也必须是static的,

比Jquery的document.ready更快的方法_jquery

这个是上次在博客园看到的一篇文章,经测试,确实比jquery的$(document).ready(function(){....})更快,并且在ie和火狐等主流浏览器上都没问题, 忘了原创是谁了,如果主人看到可以联系我, 我会立刻加上原文出处的,敬请见谅. 复制代码 代码如下: var jb51 =new function() { dom = []; dom.isReady = false; dom.isFunction = function(obj) { return Object.proto

如何在smarty模板中定义变量与常量?

定义常量非常的简单 方法是:  代码如下 复制代码 {$smarty.const.你定义的常量名} 定义变量如何做呢? smarty中定义变量 . {*下面的这一段相当于在模板内部定义一个变量UserName*}  代码如下 复制代码 {assign var="UserName" value="myz"} 这里将显示模板内部定义的一个变量:UserName = {$UserName}  例子  代码如下 复制代码 <*assign var="i&qu

switch case 中定义变量

 搞不明白,为什么有时候在switch中定义变量没有问题,有时候又会报错.  刚刚又报了一个:1540-0246 (S) The "case" statement bypasses the initialization of "CString sRoamAreaCode".   这种不清楚的状况终于因为刚刚的一时兴起,google了下下~~   原来只是加不加括号的区别.  因为C++中变量的作用域是相邻的两个大括号,假设下面的例子:  int nChoose;  

jQuery之$(document).ready()使用介绍_jquery

学习jQuery的第一件事是:如果你想要一个事件运行在你的页面上,你必须在$(document).ready()里调用这个事件.所有包括在$(document).ready()里面的元素或事件都将会在DOM完成加载之后立即加载,并且在页面内容加载之前. If you want an event to work on your page, you should call it inside the $(document).ready() function. Everything inside it