zoukankan      html  css  js  c++  java
  • javascript函数

    一、函数的声明方式

     1 //声明方式
     2 function box(num1,num2){        //普通函数的声明方式
     3     return num1+num2;
     4 }
     5 alert(box(1,2));
     6 var box=function(num1,num2){    //使用变量的方式
     7     return num1+num2;
     8 };
     9 alert(box(1,2));
    10 
    11 var box=new Function('num1','num2','return num1+num2');        //使用new的构造方法来声明函数
    12 alert(box(1,2));                                                                                //这种方式不推荐
    13 alert(typeof box);        

    二、函数可以传递函数(函数也是对象,函数名是指向函数的指针)

     1 //1.(不是作为函数来传递的,而是作为函数的返回值来传递的)。
     2 function box(sum,num){
     3     return sum+num;
     4 }
     5 function sum(num){
     6     return num+10;
     7 }
     8 var result=box(sum(10),10);        //box(20,10),sum(10)这里传递的是函数的返回值,和普通的变量一样,没区别
     9 alert(result);
    10 
    11 //2.作为值的函数。即要把函数本身作为参数传递,而不是函数的结果
    12 function box(sum,num){
    13     return sum(num);
    14 }
    15 function sum(num){
    16     return num+10;
    17 }
    18 var result=box(sum,10);        //这里sum是一个函数,当作参数传递到另外一个函数里,而不是函数的返回值
    19 alert(result);

    三、函数内部对象

      1 //函数内部对象
      2 function box(num){
      3     if(num<=1){
      4         return 1;
      5     }else{
      6         return num*box(num-1);            //4*3*2*1=24,阶乘,递归
      7     }
      8 }
      9 alert(box(4));
     10 
     11 //函数属性,arguments.callee,就是调用自己本身的函数
     12 function sum(num){
     13     if(num<=1){
     14         return 1;
     15     }else{
     16         return num*arguments.callee(num-1);            //使用arguments.callee,调用自身,实现递归
     17     }
     18 }
     19 alert(sum(4));
     20 
     21 //this,在函数内部就代表函数作用域;如果在全局,就是window作用域
     22 //window是一个对象,而且是JS里面最大的对象,是最外围的对象
     23 //alert(window);    //[object Window]
     24 //alert(typeof window);    //object,window是对象,类型是对象
     25 alert(this);    //[object Window],this目前表示的是window,因为在window的范围下
     26 alert(typeof this);    //object,和window一摸一样,所以this就是window
     27 
     28 var color='red';    //这里color就是全局变量,而这个变量又是window的属性;
     29 //alert(window.color);    //这里已经很好的说明color是window下的属性
     30 alert(this.color);    //同上
     31 
     32 window.color='red';    //    相当于 var color='red';
     33 alert(this.color);
     34 
     35 window.color='red';    //    相当于 var color='red';
     36 var box={
     37     color:'blue',        //这里的color是box下的属性,也就是局部变量
     38     sayColor:function(){
     39         alert(this.color);    //这里的this,代表box的对象
     40     }
     41 };
     42 alert(this.color);    //这里this代表window
     43 box.sayColor();
     44 
     45 window.color='red';
     46 function sayColor(){
     47     alert(this.color);
     48 }
     49 sayColor();        //这里的sayColor,其实范围还是在window下
     50 
     51 window.color='red';
     52 function sayColor(){        //所以这里执行的时候是动态的,第一次是在window下,第二次是在box下
     53     alert(this.color);
     54 }
     55 sayColor();        //这里的sayColor,其实范围还是在window下
     56 var box={
     57     color:'blue'    
     58 }
     59 box.sayColor=sayColor;    //这段代码相当于48行
     60 box.sayColor();    //这里执行的是box里面的this.color
     61 
     62 //函数是对象,本身也有属性和方法
     63 function box(name,age){
     64     alert(name+age);
     65 }
     66 alert(box.length);
     67 
     68 //apply()和call()方法,第一个参数,用来指定作用域,this表示window作用域;
     69 //apply()第二个参数,传参数数组
     70 //call()第二个参数,必须传递参数是一个一个的传
     71 
     72 function box(num1,num2){
     73     return num1+num2;
     74 }
     75 function sum(num1,num2){        //apply和call可冒充另外一个函数
     76     return box.apply(this,[num1,num2]);    //this,表示window作用域 ,[]表示传递的参数
     77 }
     78 function sum2(num1,num2){
     79     return box.apply(this,arguments);    
     80 }
     81 //alert(box(10,20));
     82 //alert(sum(10,10));
     83 alert(sum2(10,10));
     84 
     85 function box(num1,num2){
     86     return num1+num2;
     87 }
     88 function sum(num1,num2){
     89     return box.call(this,num1,num2);        //call只是传递参数不同,其他和apply一样
     90 }
     91 alert(sum(10,10));
     92 
     93 //使用call()和apply()来改变作用域
     94 var color='red';    //全局
     95 var box={
     96     color:'blue'        //局部
     97 }
     98 function sayColor(){
     99     alert(this.color)
    100 }
    101 //sayColor();        //全局
    102 //用call来实现对象冒充,冒充box下,冒充window下
    103 //sayColor.call(window);        //冒充window,red
    104 //sayColor.call(this);        //this就是window
    105 sayColor.call(box);        //冒充box,作用域就在box里面,所以color就是blue
  • 相关阅读:
    LeetCode Related Info
    LeetCode Climbing Stairs
    Linux命令语句秘籍
    Java基础学习 —— io
    Jquery的入门学习
    Java基础学习 —— bat处理文件
    Java基础学习 —— 线程
    Java基础学习——泛型
    java基础学习——集合
    两个div叠加触发事件发生闪烁问题
  • 原文地址:https://www.cnblogs.com/yuexiao/p/2476138.html
Copyright © 2011-2022 走看看