javascript的变量\函数\作用域闲谈

本文深入探讨JavaScript的基本特性,包括变量类型、函数定义与使用、作用域规则及闭包的应用。介绍了弱类型语言的特点,并展示了如何利用这些特性进行有效的编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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变量的数据被保护了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值