【js基础学习五之函数、作用域、预解析】

函数
解释:把一坨重复的代码封装,在需要的时候直接调用即可
作用: 代码的重用
1.语法
function 函数名字(){
    函数体---一坨重复的代码
}
2.函数的调用
 函数名();

注意:函数需要先定义才能使用
     函数里面可以调用其他函数

eg:求一个数组的和
function arraySum(){
    var sum=0;
    var arr=[10,20,40,50,30];
    for(var i=0;i<arr.length;i++){
        sum+=arr[i];
    }
    console.log(sum);
}
arraySum();

3.函数的参数
 在函数定义的时候,函数名字后面的小括号里的变量就是参数。
 形参:函数在定义的时候小括号里的变量叫形参,不需要写var
 实参:函数在调用的时候小括号里传入的值叫实参,实参可以是变量也可以是值

4.函数的返回值
  如果一个函数有return,那么这个函数就有返回值
  如果函数中有return,但是后面什么内容都没有,这个函数没有明确返回值.
  如果一个函数中没有明确的返回值,在调用的时候接收了,结果就是undefined
  如果直接输出函数的名字,那么是这个函数的代码

eg1:求三个数的最大值
   function getThreeMax(x,y,z){
    return x>y?(x>z?x:z):(y>z?y:z);
}
  console.log(getThreeMax(80,20,100));
eg2:判断一个数是否是素数(只能被1和自身整除的)
 解题思路:用这个数字和前面所有的数字整除一次(没有1的,没有自身的)
 function isPrimeNumber(num){
    for(var i=2;i<num;i++){
    if(num%i==0){
        return false;
    }
    return true;
 }
}
console.log(isPrimeNumber(18)?"是质数":"不是质数");
eg3:通过函数实现冒泡排序
 function sortArray(arr){
  for(var i=0;i<arr.length-1;i++){
    for(var j=0;j<arr.length-1-i;j++){
    if(arr[j]>arr[j+1]){
    arr[j]=arr[j]^arr[j+1];
    arr[j+1]=arr[j]^arr[j+1];
    arr[j]=arr[j]^arr[j+1];
       }
    }
  }
   return arr;
}
console.log(sortArray([50,10,30,80,24,57]));

5.arguments对象
  arguments是一个对象,是一个伪数组,使用arguments对象可以获取传入的每个参数的值
  arguments.length-->实参的个数
  arguments[索引]--->实参的值
  eg.计算n个数字的和
   function f1(){
     var sum =0;
     for(var i=0;i<arguments.length;i++){
        sum+=arguments[i];
    }
    return sum;
 }
 console.log(f1(10,20,30,40));
 console.log(f1(10,20,30,40,50,60));

6.函数的其他定义方式
 命名函数:函数如果有名字,就是命名函数
 匿名函数:函数如果没有名字,就是匿名函数

 函数的另一种定义方式
 函数表达式:把一个函数给一个变量,此时形成函数表达式
 var 变量=匿名函数;
 var f1 = function(){};
 调用: f1();
 
 函数是有数据类型的 function 类型的
 函数可以作为参数使用,如果一个函数作为参数,称这个函数为回调函数
 函数也可以作为返回值使用

7.作用域:使用范围
 全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
 除了函数以外,其他的任何位置定义的变量都是全局变量
 局部变量:在函数内部定义的变量,是局部变量,外面不能使用
 隐式全局变量:声明的变量没有var(可以被删除)

8.预解析:提前解析代码
  预解析把变量的声明提前了--提前到当前所在作用域的最上面
  预解析把函数的声明提前了--提前到该函数的作用域的最上面(里面)
 eg:var a = 25;
 function abc (){
   alert(a);//undefined
   var a = 10;
 }
  abc();
 eg2:
  -------------
  f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
  var a = b = c = 9;
  console.log(a);
  console.log(b);
  console.log(c);
}
  -------------
解答:
 function f1(){
   var a;//局部变量
   a=9;
   b=9;//隐式全局变量
   c=9;//隐式全局变量
  console.log(a);//9
  console.log(b);//9
  console.log(c);//9
}
f1();
 console.log(c);//9
console.log(b);//9
console.log(a);//报错,因为a是局部变量,只能在函数内部访问

猜你喜欢

转载自blog.csdn.net/cx17521000200/article/details/81738814