1.变量
本身是弱语言类型,所以在类型的控制上是有限的。统一的变量类型是var,用它申明的变量可以是字符串,数字,布尔型,数组,还有最特殊的函数。如下所示:
var v1="123";
var v2=123;
var v3=true;
var v4=function(){ };
2.函数
函数本身上来说与其他语言的函数定义没有什么大区别,但是本身还是有一些自己的特点的。函数是一个对象,参数也是函数内的一个属性,即便是不在函数定义中声明参数,但是也可以使用参数对象arguments获取实际调用时的参数。这个arguments是一个数组类型的对象。
var v5=function(){
for(var i=0;i<arguments.length;i++){
//get the arguments[i] as parameter
}
};
这样也会使得函数的重载发生了变化,不可以如同其他语言一样使用函数名,返回值一样,参数不同的方式进行重载。只能在函数体内通过对arguments内参数的个数进行判定才可以模拟出函数重载的效果。
var v6=function(){
if(arguments.length==0){
//no parameter type function
}else if(arguments.length==1){
//one parameter type function
}
// add others branch
}
3.作用域语言本身的作用域是函数作用域,就是参数在同一个函数的函数体内的作用域是一致的。如果一个参数在函数体内,一个参数在函数体外,那么在函数体外的参数的作用域要比在函数体内的参数作用域大。参数作用域最大的作用域是全局作用域。例如
var v7="123";
var v8=function(){
var v9="456";
}
例子中v7的作用域要比v9的作用域大,在v8函数体内可以对v7随意使用,但是在v8的函数体外却不可以对v9调用。
另外比较奇特的一点是变量定义了没有赋值,那么初始值为null。变量没有定义却被使用了,那么这个变量的初始值是“undefined”。
var v10;
alert(v10);
alert(v11);
v10显示的是null,v11是undefined。
4.函数与作用域的组合使用:闭包
其实闭包就是通过使用特定的方式来控制局部变量的作用域来实现数据保护和提升局部变量的作用域到全局的作用域。下面是实现数据保护和提升局部变量的作用域到全局的作用域的闭包:
var v12=function(){
var obj={};
var _time="3";//protect this
obj.getTime=function(){
return _time;
};
return function(){
return obj;
};
}
obj的作用域提升到了全局,_time变量的数据被保护了。