对于开源世界,我是很想投入,也很想去做一些自己能做的事情,可惜只怪自己学术不精,往往进去都是找一个跟自己相关的东西,而从来没有什么贡献。不知道什么时候有了从源码中找答案的这个想法,前面的博客中说过,程序中的问题,可以通过调试,跟踪,模拟等手段找原因,其实还可以从源码中获取相关答案,请相信:源码中可以找到问题的本质的。
在Java这样的面向对象语言中,变量的作用域是很关键的,不仅仅是这些面向对象的语言,其实所有的语言都一样吧?今天我不谈变量的类型,也不谈变量的private,public等访问,就谈谈作用域。C#,Java变量按照作用范围大体上分为属于类的,也就是用static声明的,然后就是成员变量以及方法变量,成员变量是整个对象都可以访问的,而方法变量是只有该方法可以访问。
那么javascript呢?如果看了JQuery的源码,可以看到JQuery的所有东西都在一个自执行的匿名函数中,在这个匿名函数中传递了一个windows全局对象,而在这个windows对象中附加上了JQuery和$这两个,这两个也就是我们访问JQuery的入口。
但是清楚的话可以看到源码一开始就有一个Var JQuery,而给windows附加的JQuery对象是在最后,一个Var,一个没有用Var,而是直接加在了wndows之后作为全局变量。这个其实就是Javascript的变量范围,也就是全局变量和局部变量,因为JQuery在我的心中根本就不是面向对象的语言,没有类,接口,继承等,但是它都可以模拟出来,我真是不懂。
变量及变量声明是一门语言最基本的概念,初学者都会很快掌握。JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符)。
方式1
1
2
|
var
test;
var
test = 5;
|
需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。
方式2
1
|
test = 5;
|
没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。
方式3
1
2
|
window.test;
window.test = 5;
|
这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。 如JQuery1.5中最末一句
1
|
window.jQuery = window.$ = jQuery;
|
如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的。分别按以上三种方式声明三个变量a1,a2,a3。