第九区-Jquery超级群

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 879|回复: 9

群讨论:关于jquery的全局变量问题 [复制链接]

Rank: 7Rank: 7Rank: 7

发表于 2011-7-10 23:37:54 |显示全部楼层
本帖最后由 简单 于 2011-7-10 23:39 编辑

问题解决:新疆-少爵
问题整理:宁波-简单
  1. <script type="text/javascript">
  2.     var x='hi';
  3.     function hello(){
  4.         alert(x);
  5.         var x='bbb';
  6.     }
  7.     hello();
  8.     alert(x);
复制代码
这段代码,猜一下第一个alert会显示啥呢?咋一看,能显示‘hi’吧?其实不是的,显示的undefined.
虽然重新定义局部变量x是放在alert之后,但是jquery解析时,还是先定义了局部变量,全局变量在hello函数里就不会显示了,而此时局部变量还没有被赋值,所以显示undefined。
当然,离开函数后,全局变量继续有效,所以第二个alert还是显示hi。
不要以为写程序时没人会这么去写,这是新疆-少爵从提问者发的一堆代码中精简出来的。这个例子再次提醒我们,一定要慎用全局变量。

Rank: 7Rank: 7Rank: 7

发表于 2011-7-11 09:27:32 |显示全部楼层
怎么会酱紫。。。。 我思考思考
别人笑我太淫荡 我笑他人不开放

使用道具 举报

Rank: 2

发表于 2011-7-11 09:51:47 |显示全部楼层
哦哦。顶一下,简单的论坛,又重新运行起来了啊,支持

使用道具 举报

Rank: 2

发表于 2011-7-11 11:23:41 |显示全部楼层
全局跟局部、、、

使用道具 举报

Rank: 1

发表于 2011-7-11 17:19:13 |显示全部楼层
这几天看权威指南又说道这个问题;
function hello(){
        alert(x);
        var x='bbb';
    }
在alert前面相当于声明了一个
var x;
没有参数、所以返回undefined;

使用道具 举报

Rank: 7Rank: 7Rank: 7

发表于 2011-7-12 09:34:21 |显示全部楼层
function hello(){
  alert(x);
  var x='bbb';

  function f(){}
}

实际上,在解析阶段,这段代码变成了↓


function hello(){
  // 预定义var的变量
  var x;
  // 预定义function声明的函数
  function f(){}
  // 那些“受贿的预先行为”到此结束
  alert(x);
  x='bbb';
}

这是前几天讨论的结果
不积跬步无以至千里
不积小流无以成江海

阿良的小站

使用道具 举报

Rank: 7Rank: 7Rank: 7

发表于 2011-7-12 16:41:18 |显示全部楼层
这是   "新疆-少爵"   从提问者发的一堆代码中精简出来的     是我么?

使用道具 举报

Rank: 7Rank: 7Rank: 7

发表于 2011-7-12 17:07:25 |显示全部楼层
是的啊,一下没想起来你在论坛的ID,所以就写了QQ群里的名字。
对了,现在道具里面有改名卡了,你可以改一下的。记得每人只能改一次啊。

使用道具 举报

Rank: 2

发表于 2011-7-13 09:26:16 |显示全部楼层
原来如此。呵呵 。这个。。javascript里是这样的啊。

使用道具 举报

Rank: 7Rank: 7Rank: 7

发表于 2011-7-13 16:48:47 |显示全部楼层
使劲灌水

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|第九区-Jquery超级群    点击这里加入此群 点击这里加入此群

GMT+8, 2012-2-8 09:26 , Processed in 0.068804 second(s), 16 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部