问题描述
<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); 放在一个文件里。否则,将之放在全局变量里,甚至任何一个能够共享的变量里。但先保证程序执行是同步的