东西有点绕,需要好好消化,冒泡排序明天补上
———————————————————————c & s V ] J P—o 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 * s的6 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 a部Y / . 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();