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
  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/yuexiao/p/2476138.html
Copyright © 2011-2022 走看看