29 对象&函数

switch:

穿越:

  没有判断结果的情况下执行下一个case的语句块,叫穿越

 

或者穿越:

switch(s%10){
        case 1: 
        case 2case 3: 
        s++;
        break;
        default:...;
    }

累积穿越:

switch(s%10){
        case 0:
            s = 100;
        case 1: 
        case 2case 3: 
        s++;
        break;
        default:...;
    }

 

switch判断:

switch(true){//此处必须写true,否则不会进入下面代码块
        case s > 90:...;
        break;
        case s > 95:...;
        break;
        case s > 95:...;
        break;
        default:...;
}
    

 

对象

设置变量的属性:

obj[a] = value;

如果a为变量,那么对象的key为此变量a的值,a的值改变,变量的key也改变

如果a为常量,那么对象的key为a本身

对象的key在ES5下必须是字符串类型

        var obj = {a:1};
        var t = 9;
        obj[t] = 2;//obk[9] = 2;
        obj['a'] = 3;//{a:3}
        obj[10] = 1;//{10:1}
        obj.a = 100;//{a:100}
        console.log(obj);

 

for in循环:

遍历对象、数组、字符串的key,是ES5标准

var obj = {x:1,y:2,z:3}
        for (const key in obj) {
            console.log(key);//打印x,y,z
            console.log(obj['key']);//打印undefined,没有此key可以对应的值
            console.log(obj[key]);//打印obj中key为x,y,z对应的值
        }

 

函数:

script标签创建时,会优先将函数存入堆中,将函数名存入栈中(匿名函数只有在代码运行到定义匿名函数后才能调用,没有被预先放入栈中,不在此列)

下面的script标签可以调用上面script标签定义的内容,反之不能

<script>
      var first = 1;    
    //   console.log(second);报错not defined
    </script>
    <script>
        var second = 2;
        console.log(first);//打印1
</script>

 

匿名函数:

var fn = function(){}

包括自执行函数: (function(){})();

 

构造函数

var fn = new Function("a","b","console.log(a+b)"){}

 

作用域:

  一个东西所作用的范围
    作用域是相对于函数来说的
    函数外定义的变量可以在函数中调用
    函数内定义的变量不能被函数外调用(var定义)
    
    如果函数中没有用var定义变量,直接使用变量(a = 10),
    该变量是全局变量,即window.a.(ES6不允许)也有叫做变量作用域提升
    在函数中任意位置使用var定义的变量都是局部变量,就算if和for中的也一样,即使没有进入if()语句,那么也是定义了局部变量

    局部变量:在函数内用var定义的变量,参数就是局部变量
    全局变量:在函数外用var定义的变量就是全局变量

 

参数:

    执行函数时填入值与函数参数列表顺序一致
    参数可以是任意内容,如果没有传入参数,就是undefined
    js是一个弱类型语言,因此参数不能强制约定类型(有时需要判断)
    ES5中不能设置参数默认值,ES6可以

    参数是局部变量也是临时变量,_w,_h,_color

 

参数列表:

  如果参数数量不确定,或者不设置参数,却又在调用函数时传入了参数

  那么参数就会存在于参数集arguments中

  arguments是个虚伪数组

  

  arguments.callee:代表函数本身

  arguments.callee.caller:代表调用当前函数的环境函数(谁调用我我就是谁)  

 

回调与递归:

  回调:我调别人

  递归:我执行我自己

堆栈溢出: 递归回调次数过多,或者没有终结递归回调的条件

posted @ 2019-12-29 20:03  IslandZzzz  阅读(204)  评论(0编辑  收藏  举报