JavaScript函数实际上是个对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定(函数名是指针就可以随便指啦)。引自《JavaScript高级程序设计》。
既然函数是对象,就可以给他设置属性,相当于函数内部的静态变量。
//Though my English is not very well, my Chinese English is not so bad.
function foo(){ if(typeof foo['aaa'] == 'undefined'){ //caculate value of aaa foo['aaa'] = 'value of aaa'; } //you can use or change the value of aaa, //the value of aaa will not be change in your next invocation of foo foo['aaa'] = 'change value of aaa'; alert(foo['aaa']); } foo();
接下来看另外一个函数,这个函数是对象定义函数,该函数分别在内部和外部定义了一个静态变量,这里定义的只是一个常规的String类型的变量,如果是Function类型的变量,那就是静态函数了。
function Foo(){ //define a static variable in the object define function if(typeof Foo.aaa == 'undefined'){ //caculate value of aaa Foo['aaa'] = 'value of aaa'; } //you can use or change the value of aaa, //the value of aaa will not be change in your next invocation of foo Foo.aaa = 'change value of aaa'; alert(Foo['aaa']); this.name = 'bbb'; } //define a static variable out of the object define function Foo.age = '18'; var foo = new Foo(); //if you use foo.aaa or foo.age will be error alert(foo.name + '---' + Foo.aaa+ '---' + Foo.age);