javascript—语句和异常

五、语句和异常

1、条件语句

JavaScript中支持两个中条件语句,分别是:if 和 switch

1     if(条件){
2  
3     }else if(条件){
4          
5     }else{
6  
7     }

 

 1     switch(name){
 2         case '1':
 3             age = 123;
 4             break;
 5         case '2':
 6             age = 456;
 7             break;
 8         default :
 9             age = 777;
10     }

 

2、循环语句

JavaScript中支持三种循环语句,分别是:

1 var names = ["alex", "tony", "rain"];
2  
3 for(var i=0;i<names.length;i++){
4     console.log(i);
5     console.log(names[i]);
6 }
方式一
1 var names = ["alex", "tony", "rain"];
2 
3 for(var index in names){
4     console.log(index);
5     console.log(names[index]);
6 }
方式二
1 while(条件){
2     // break;
3     // continue;
4 }
方式三

3、异常处理

1
2
3
4
5
6
7
8
9
10
try {
    //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
    // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
    //e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
     //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}

注:主动跑出异常 throw Error('xxxx')

六、函数

1、基本函数

JavaScript中函数基本上可以分为一下三类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 普通函数
    function func(arg){
        return true;
    }
          
// 匿名函数
    var func = function(arg){
        return "tony";
    }
  
// 自执行函数
    (function(arg){
        console.log(arg);
    })('123')

注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。

2、作用域

JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。

切记:所有的作用域在创建函数且未执行时候就已经存在。

 1         function f2(){
 2             var arg= [11,22];
 3             function f3(){
 4                 console.log(arg);
 5             }
 6             arg = [44,55];
 7             return f3;
 8         }
 9 
10         ret = f2();
11         ret();

结果:(1)先执行ret=f2(),开始执行函数f2(),声明局部变量arg,加载f3()但不会执行,重新给arg赋值,然后返回f3;

   (2)再执行ret()(即f3()),打印arg的值;

3、闭包

闭包是指可以包含自由(未绑定到特定对象)变量的代码块。

「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」

由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。

1
2
3
4
5
6
7
8
9
10
function f2(){
    var arg= [11,22];
    function f3(){
        return arg;
    }
    return f3;
}
 
ret = f2();
ret();

4、面向对象

1
2
3
4
5
6
7
8
9
10
11
function Foo (name,age) {
    this.Name = name;
    this.Age = age;
    this.Func = function(arg){
        return this.Name + arg;
    }
}
  
var obj = new Foo('alex', 18);
var ret = obj.Func("sb");
console.log(ret);

对于上述代码需要注意:

  • Foo充当的构造函数
  • this代指对象
  • 创建对象时需要使用 new

上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:

1
2
3
4
5
6
7
8
9
10
11
12
function Foo (name,age) {
    this.Name = name;
    this.Age = age;
}
Foo.prototype = {
    GetInfo: function(){
        return this.Name + this.Age
    },
    Func : function(arg){
        return this.Name + arg;
    }
}
posted @ 2019-01-13 20:53  yehost  阅读(151)  评论(0编辑  收藏  举报