zoukankan      html  css  js  c++  java
  • JavaScript Function(函数表达式)

      创建函数

      创建函数的方式有两种:1、函数声明,2、函数表达式

      函数声明的语法为 

    functionName();  //不会报错,函数声明提升
    function functionName(arg0,arg1,arg2) { //do somethings; }
    alert(functionName.name);  //输出 functionName

      也可以采用函数表达式创建函数

    functionName();  //会报错,此时 functionName 仅仅是 var functionName,其值为 undefined;
    var functionName = function(arg0,arg1,arg2) { //do somethings; }
    alert(functionName.name);  //输出 ""

      


      递归

      当一个函数可以通过名字调用自身,说明该函数为 递归函数.

      

    function functionName() {
        // do somethings;
        return functionName();
    }
    
    var another = functionName;
    functionName = null;
    
    another();    //报错, 因为找不到 functionName();
    
    function functionName() {
        // do somethings;
        return arguments.callee();        //指向该函数的指针
    }
    
    var another = functionName;
    functionName = null;
    
    another();  //不报错.
    

      


      闭包

      了解闭包,首先了解函数的作用域。

      函数作用域里的变量,会一级级的向上查找变量,直到找到为止,找不到则报错.

    var a = 1;
    function getA(){
        alert(a);  //当在当前作用域找不到变量时,会去父作用域查找该变量,直到找到为止,如果找不到,则报错.
    }
    getA();        //1;
    

      但是,函数作用域外的变量,则访问不到函数作用域里的变量。

    function setA(){
        var a = 1;
    }
    setA();
    alert(a);    //报错.因为变量 a 不能访问到 setA 里的变量,且外部也没有 变量a
    

      创建一个闭包函数,来访问函数里的值。

    var a = 5;
    function func(){   var a = 1;   return {     "get":function(){       alert(a);     },     "set":function(num){       a=num;     },     "getthis":function(){       alert(this.a);     }   } } var a = func();  //闭包
    a.get();  //输出 1;
    a.set(2);
    a.get();  //输出 2;

    var b = func();  //闭包
    b.get();  //输出 1;
    a.set(3);
    b.get();  //输出 1;
    a.get();  //输出 3;

      由上个例子可见,闭包会造成内存占用比以前更多。因此要谨慎使用闭包。


     模仿块级作用域

      由于 JavaScript 没有块级作用域,会导致有些时候会出差错,得不到我们想要的结果。

    function func() {
      var i = 5; for (var i =0;i<10;i++) { //alert(i); } alert(i); //输出10; 并不是我们想要的10; }

      因此 可以利用 立刻执行的匿名函数,来模拟块级作用域。

    function func() {
        var i = 5;
        (function(){
            for (var i = 1;i < 10;i++) {
                //alert(i);
            }
        }());
        alert(i);    //输出 5
    }
    

      


      

  • 相关阅读:
    Scott的ASP.net MVC框架系列文章之一
    NHibernate配置的总体流程(转载)
    深入浅出MFC》学习笔记之一
    用javascript实现选择下拉菜单间的数据转移,用javascript实现超强的万年历,javascript弹出窗口后,关闭窗口时不弹出对话框
    深入理解动态库
    C#中读取文件内容
    a id="saveButton" href="#" onclick="javascript:startUpload();"Upload !!/a
    如何调用DLL (基于Visual C++6.0的DLL编程实现)
    MSDN获取网站,www.bd66.com
    应用MFC开发高级应用程序
  • 原文地址:https://www.cnblogs.com/linjilei/p/5155829.html
Copyright © 2011-2022 走看看