第二周day1

66 阅读4分钟

自定义Function

什么是函数:

  需要先定义好,可以反复是用到代码段;

何时使用:

   1,不希望打开网页立即执行的。
   2,以后可以反复使用的。
   3,希望绑定在页面元素上。

如何使用

1,创建:

  声明方式:
      function 函数名(形参组){
        函数体;
        return 返回值:默认返回undefined;
        }
        
  直接量方式:
      var 函数名=function(形参组){
        函数体;
        return 返回值:默认返回undefined;
        }
        
   形参组可以不写
        

2,调用:

函数名(实参组)
实参组必须和形参组,数量,顺序一一对应。
可以用var 变量名=函数名(实参组); 接住返回的结果;

其实return的本意是退出函数,但在return后面加上一个数据后就会将数据返回到此函数作用域的外部,需要注意的是return只负责返回并不会保存,所有在需要用到返回的数据时需要创建一个变量来接住。而就算不写return也会return一个undefined。

作用域

全局作用域: 全局变量和全局函数,在任何地方都可以使用。

函数作用域: 函数作用域的变量和函数,只有在函数【调用时内部】可用

 变量的使用规则:优先使用自身函数作用域的,函数作用域没有,找全局,全局没有就报错。
 特殊点:也算缺点
     千万不要在函数中对着未声明的变量赋值,会造成全局污染。
     函数作用域可以使用上级作用域的数据,直到全局作用域。但是不能使用下级函数作用域的数据。
         解决方法:把你需要用到的下级函数作用域的数据return返回。
         

声明提前:

在函数正式执行之前,程序会将var 【声明】的变量 和 function【声明】的函数,悄悄地集中在当前作用域地最顶部,但是赋值会留在原地。

何时使用:永远不会自己手动使用,会干扰我们地判断,打乱我们地逻辑。只可能会在笔试时遇到; 只要遵守以下原则,永远不会碰到这种情况:

1,变量名和函数名尽量不要起重复地;
2,先创建后使用;
最后:如果在面试需要你先使用后创建,那么基本就是在考你的声明提前。
 

按值传递: 两个变量之间赋值,有两种情况的差异;

1,如果传递的是原始类型的值:

修改一个变量,另一个变量不会受到影响,因为实际上是复制了一个【副本】再传递;

2,如果传递的是引用类型的值:

修改一个变量,另一个变量会受到影响,因为引用类型的数值并没有保存到变量中,
而是赋值给了变量一个地址值,传递的自然也是一个地址值,所以无论修改哪一个变量,
实际上修改的都是同一个引用类型里面的数值。

预定义全局函数

由前辈们定义好的,我们可以直接使用,无论在哪里都可以使用的。

比如:parseInt/parseFloat/isNaN/eval...

分支结构

1,if分支 - 之前讲过就不讲了 2,短路和三木结构 - 也讲过 3,switch...case...结构:

语法:weitch(变量/表达式){
        case1:
        操作1breakcase2:
        操作2breakdefault:
        默认操作;
        }
特殊:1.不具备隐式转换。
      2.只要满足一个case值,就会默认执行后面所有操作。
         所以建议:要在每一个操作后面加上一个break -> 结束此次操作;
         default的后面也可以不加,如果中间连续有几个值的操作是相同的也可以不加
             直接写作:
                    case1case2case3case4:
                    操作;
                    

面试题: if 和 switch 的区别

if的缺点:if执行效率较慢;
if的优点:可以做范围性的判断。
switch的缺点:必须知道最后的结果才能判断,不能做范围判断;
switch的优点:执行效率高相对较高。
        

建议:优化你的代码,尽可能的将if结构转为短路,三木或者switch。