blog.ja168.netraindot.blog.chinaunix.net
liuxingyuyuni
全部博文(77)
2013年(1)
2010年(1)
2009年(17)
2008年(58)
叶绍琛
格伯纳
cynthia
Bsolar
浪花小雨
花好月不
glaye
lithink
douyaqia
xuguoxin
分类:
2008-03-19 00:59:00
<script> /** * @describe 小心javascript当中的变量作用域 * @date 2008-03-18 20:37 * @author BianYuan */ /** 定义全局变量 */ var userName = "边缘"; var userEmail = "liuxingyuyuni@gmail.com"; document.write("全局变量userName的值为 : " + userName + ""); document.write("全局变量userEmail的值为 : " + userEmail + ""); /* * @todo 获得用户名称 * @describe 如果在方法中未使用var关键字声明变量 * 那么在方法中非常容易在无意间修改了全局变量的值 */ function getUserName() { /** 这里的userName与全局变量重名, js认为这是全局变量,而此时你很有可能当他是局部的 这里修改了全局变量userName的值,我理解这可能正是因为JS的简单性造成的 在其他语言如(PHP)当中,如果在方法中想使用全局变量的名称首先是需要global 在写JS的时候要特别注意.否则就会在方法中意外修改了全局变量的值(其实有时候这不是你想要的) */ userName = "张三"; //实际上我以为这是局部的,我想有些新手也同样这样认为[在方法内变量与全局变量同名时!] /** * 千万注意下边friend变量,因为没有使用var关键字声明,故此时定义的是全局变量.后边会看到结果 */ friend = "某某某";//定义局部变量,此时全局中并未有friend变量 document.write("全局变量userName在方法内被意外修改成: " + userName + ""); } /* * @todo 如何更加安全的利用JS的变量作用域呢? * 使用var声明变量是一个好习惯,由其是在方法当中 */ function getUserEmail() { /** 这里使用了var关键字声明了userName为局部变量, 就算此时外部有同名的变量名也不会被重写, 不会对全局变量产生任何影响 */ var userEmail = "nobody@gmail.com"; document.write("这里输出的是获真价实的局变变量值,就算变量名与方法外部全局变量名重名也不会影响全局变量" +userEmail + ""); } //调用方法 getUserName(); getUserEmail(); document.write("再次输出全局变量userName的值为 : " + userName + " ! 注: 已经被某个方法给强行修改了"); document.write("全局变量userEmail的值为 : " + userEmail + " !注: 未被修改"); /** 在getUserName() 方法中我们曾经定义了一个变量 friend ,表面看来是在方法体中定义的,应该为局部变量 这里是不应该输出的,可是...... */ document.write("曾经在getUserName方法中定义的变量:friend: " + friend + " !注:竟然输出了, 记加上var!现在动手在上边的friend变量前边加上var试试"); document.write("总结: 在方法体中是不是局部变量就看: 在变量是前方是否使用了var关键字"); document.write("总算搞明白了JS的变量变用域......");</script>
总结: 在方法体中是不是局部变量就看: 在变量是前方是否使用了var关键字
上一篇:js 获得当前是星期几
下一篇:JAVA中的空指针异常
liuxingyuyuni2008-05-12 11:52:18
很乱....
chinaunix网友2008-05-12 08:47:00