东西有点绕,需要好好消化,冒泡排序明天补上

———————————————————————c & s V ] J Po 0 g { | E ;—————-J V g q 6 s——–` p H } u j X——–

函数:封装p X J 5 h R ~一段特; D ] ? # y k b ?定功能的代码,然后通过函数名重复调用! r Y h [ O此段代码

定义函数 function +@ [ Z w s 9 G 函数名(参数){代码段}:function ge7 h ? ` Z ? v ,tSum( ){ }  //参数根据情况有或者没有

函数调用:getSum( );

参数:function sum(形参1,形参2){ }  //形y q $ 4 : ] L参没有实际意义= K W P A % j V,调用函数时用来传入参数。相当于占位一样,本身没有意义

实参:sum(实参1x e . x $ B j K,实参2){ } 实参就是要传入的* ` E H T . , 7 9参数,有着实际的意义。相当于传入的变量或者值

实参传入的顺序就是挨个来,不会跳的

举例:

functW J K b v (ion sum(a,b){      //ab是形参,占用实参的位置但没有意义
  getSum = a+b;
  co; \ Rnsole.log(getSum)
}
sum(1,2)  //调用函数    //1,2是实参C 6 e / Z u [ Z #,替换形参在函数中的位置并执行,相当于给形参赋值a=1

实参也可传入已t p F r e g )赋值的变量,数组等* b \ c N l S i

function} G g F [ sum(a,b){     
  getSum = a+b;
  console.log(getSum)
}

var x=1;

var y=2
sum(x,y)

调用的时候想当与将实参复制一份传给形参,所以改变形参k \ V M * s6 W W P ! k值,实参的值不会被改变

函数返回值 retuj X y _ Wrn,即函数执行完毕需要提取的东西。可以返回函数的结果。返回的结果可以用变量接收。x=getSum()  rO , o – V C 8eturn 也可提前结束函数(函数运行到return自动结束,后面不执行),return之后也可什么都不跟,返回undefined

求1!+2!+3!+4!……n!

function getChengJi(i){
  var k = 1;
  for(m=1;m<=i;m++){
    k*=m;
  }  
  return k;
}
console.log(getChengJi(3)\ , D – { n a a)
function getSum(n){

  sum=0;
  f3 I 0 P 3 H R N eor(a=1;a<=n;a++){
    sum+=getChengJi(a)
  }
return sum;
}
console.log(getSum(3))

arguments的使用:数组内部对象,可通过arguments获取函数调用的时候传入的实参

arguments非常像数组但不是数组  //其他的放? ; Q在js高级里讲。

冒泡排序:

函数其| c V v \ 7他概念(一部分,其余在js高级中讲)

匿名函数:没有名字的函数就是匿名函数,通常将一个没有名字的函数付给一个变量。通过变量来调用匿名函数

a=function( )L w ) !{ };

匿名函数还可进行自调用,即自调用函数:函数写完之后立即调用。不需要单d ] f C# k N u t – K ] X调用。末尾的()就相当于调用了函数

自调用:(function( ){ }) ( )

例如:(funciton(){

  console.logv 9 \ – S g @ u(“这是一个自调用函数”)

})( )

自调用函数不需要单独调用,可直接运行

函数也是一种数: ! S Y据类型,即函数类型的变量/ u z P 9 c s:,所以函数也可当做参数传递

a=a X v j e lfuncition(){ }

coG N ( a m 9 1 fso` n # V a ^le.log(typeof.a)  //结果为function类型

函数当做参数传递:

var a= function(){
  console.log(“我是传过来的”);
}
funcy n –tion b(k){
  k();
}
b(a);

由于函数属于一种数据类型,所以也可被返回return //注意,返回的要写匿名函数

function a(m){
  b=4;
  return function(){            //返回一个匿名函数
      console.log(m+b)
     }
}
s =o A W a(9 ) o o 4 $3);                //给s赋的值是一个函数,输出s就是函数的代码,需要再次调用才能运行
console.log(s);      //返回\ k 3 !匿名函数代码
s();            //调用了返回的– 0 d函数

作用域:变量或者函数可以起作用的范围

全局作用域:在全局定义的变量在任何位置都可以访问(函数外部)

  函数内部定3 1 0 3 f义变量若不用var定义,则属于全局变量!!!!!!!!!!!!!

局部作用域:函数内部就是局部作用域。局部变量就是内部var定义的变量

  注意:function W(){var a= b = c =5;}    符合规范,但是只有a前面有var,所以只有a是局部变量,bc是全局变量

ES6新增块级作用域: 即{ }中的代码称为代码块,其内部单有作用域,内c 9 # T + P aY / . V L ) D变量外部无法访问

局部变量在函数执行完毕被销毁(内存回收),全局变量在浏览器被关闭后才会被回收

作用域链:

// 全局作用域—-0级作用域链
var a=5;
function f1(){
          // f1局部作用域—-一级作用域链
  var a = 10;
 P r f j ^ 2 w ? c function f2(){
          // f2局部作用域—-q ^ f )二级作用域链
        console.log(a);
        }
  f2();      //
}

f1();      //结果a=10 作用域先在当前域找,没有的话一层一层往外找

预解析:代码执行的时候都会有预解析,只有顺序不正常才会有改变

1.变量提升,把变量的声明提升到当前作用域的最上面,不包括变量的赋Z 2 – q

  console.log(a);    //由于预解析,所以不报错,由于( S ) = k F ( c只提升变量不提升变量赋值,所以输出undefined

  a= 5;      

2.函数提升,把函数的声明提升到当前作用域的最上面,不包括函数的. B F a L t a y调用

f();

function f(){ c3 z !onsole.log(1);}  //由于预解析,提升函数声明,所以输出1

预解析案例P d 0 k r

var a=4;

function f(, $ s ( Y ] !){

  console.log(a);      //由于当前作用域有a,所以预解析之后,输出undefined

  var a=2;

  console.log(a);     j M * G Q 2 e x //a在前,所以a=2

}

f();

发表回复

您的电子邮箱地址不会被公开。