首页 > temp > JavaScript教程 >
-
JavaScript 04 函数,参数,形参,实参,返回值return,arguments的使用,冒泡排序法
东西有点绕,需要好好消化,冒泡排序明天补上
-------------------------------------------------------------------------------------------------------
函数:封装一段特定功能的代码,然后通过函数名重复调用此段代码
定义函数 function + 函数名(参数){代码段}:function getSum( ){ } //参数根据情况有或者没有
函数调用:getSum( );
参数:function sum(形参1,形参2){ } //形参没有实际意义,调用函数时用来传入参数。相当于占位一样,本身没有意义
实参:sum(实参1,实参2){ } 实参就是要传入的参数,有着实际的意义。相当于传入的变量或者值
实参传入的顺序就是挨个来,不会跳的
举例:
function sum(a,b){ //ab是形参,占用实参的位置但没有意义
getSum = a+b;
console.log(getSum)
}
sum(1,2) //调用函数 //1,2是实参,替换形参在函数中的位置并执行,相当于给形参赋值a=1
实参也可传入已赋值的变量,数组等:
function sum(a,b){
getSum = a+b;
console.log(getSum)
}
var x=1;
var y=2
sum(x,y)
调用的时候想当与将实参复制一份传给形参,所以改变形参的值,实参的值不会被改变
函数返回值 return,即函数执行完毕需要提取的东西。可以返回函数的结果。返回的结果可以用变量接收。x=getSum() return 也可提前结束函数(函数运行到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))
function getSum(n){
sum=0;
for(a=1;a<=n;a++){
sum+=getChengJi(a)
}
return sum;
}
console.log(getSum(3))
arguments的使用:数组内部对象,可通过arguments获取函数调用的时候传入的实参
arguments非常像数组但不是数组 //其他的放在js高级里讲。
冒泡排序:
函数其他概念(一部分,其余在js高级中讲)
匿名函数:没有名字的函数就是匿名函数,通常将一个没有名字的函数付给一个变量。通过变量来调用匿名函数
a=function( ){ };
匿名函数还可进行自调用,即自调用函数:函数写完之后立即调用。不需要单独调用。末尾的()就相当于调用了函数
自调用:(function( ){ }) ( )
例如:(funciton(){
console.log("这是一个自调用函数")
})( )
自调用函数不需要单独调用,可直接运行
函数也是一种数据类型,即函数类型的变量:,所以函数也可当做参数传递
a=funcition(){ }
cosole.log(typeof.a) //结果为function类型
函数当做参数传递:
var a= function(){
console.log("我是传过来的");
}
function b(k){
k();
}
b(a);
由于函数属于一种数据类型,所以也可被返回return //注意,返回的要写匿名函数
function a(m){
b=4;
return function(){ //返回一个匿名函数
console.log(m+b)
}
}
s = a(3); //给s赋的值是一个函数,输出s就是函数的代码,需要再次调用才能运行
console.log(s); //返回匿名函数代码
s(); //调用了返回的函数
作用域:变量或者函数可以起作用的范围
全局作用域:在全局定义的变量在任何位置都可以访问(函数外部)
函数内部定义变量若不用var定义,则属于全局变量!!!!!!!!!!!!!
局部作用域:函数内部就是局部作用域。局部变量就是内部var定义的变量
注意:function W(){var a= b = c =5;} 符合规范,但是只有a前面有var,所以只有a是局部变量,bc是全局变量
ES6新增块级作用域: 即{ }中的代码称为代码块,其内部单有作用域,内部变量外部无法访问
局部变量在函数执行完毕被销毁(内存回收),全局变量在浏览器被关闭后才会被回收
作用域链:
// 全局作用域----0级作用域链
var a=5;
function f1(){
// f1局部作用域----一级作用域链
var a = 10;
function f2(){
// f2局部作用域----二级作用域链
console.log(a);
}
f2(); //
}
f1(); //结果a=10 作用域先在当前域找,没有的话一层一层往外找
预解析:代码执行的时候都会有预解析,只有顺序不正常才会有改变
1.变量提升,把变量的声明提升到当前作用域的最上面,不包括变量的赋值
console.log(a); //由于预解析,所以不报错,由于只提升变量不提升变量赋值,所以输出undefined
a= 5;
2.函数提升,把函数的声明提升到当前作用域的最上面,不包括函数的调用
f();
function f(){ console.log(1);} //由于预解析,提升函数声明,所以输出1
预解析案例:
var a=4;
function f(){
console.log(a); //由于当前作用域有a,所以预解析之后,输出undefined
var a=2;
console.log(a); //a在前,所以a=2
}
f();
来源:https://www.cnblogs.com/xiaoyuheng/p/14715915.html