• 《JS权威指南学习总结--第8章 函数知识》


    内容要点:

    1.函数表达式定义后立即调用: var tensquared = ( function(x){ return x*x ;}(10) );

    2.嵌套函数

          在JS里,函数可以嵌套在其他函数里。例如:

              function hypotenuse(a,b){

                   function square(x){ return x*x;}

                   return Math.sqrt(square(a)+square(b));     

               }

         嵌套函数的变量作用域规则:它们可以访问嵌套它们(或多重嵌套)的函数的参数的参数和变量。例如,在上面的代码中,内部函数aquare()可以读写外部函数hypotenuse()定义的参数a和b。

    3.四种方式来调用JS函数

           作为函数、作为方法、作为构造函数、通过它们的call()和apply()方法间接调用

    4.定义并调用一个函数来确定当前脚本运行时是否为严格模式

            var strict = ( function(){ return !this }());

    5.方法调用和函数调用的一个重要的区别

         即:调用上下文。

         属性访问表达式由两部分组成:一个对象(o)和属性名称(m)。在像这样的方法调用表达式里,对象o成为调用上下文,函数体可以使用关键字this引用对象。例如:

         var calculator = {      //对象直接量

             operand1:1,

             operand2:1,

             add:function(){

                 //注意this关键字的用法,this指代当前对象

                this.result = this.operand1 + this.operand2;

                }

            };

         calculator.add(); //这个方法调用计算1+1结果

         calculator.result  //=> 2

       方法和this关键字是面向对象编程范例的核心。任何函数只要作为方法调用,实际上都会传入一个隐式的实参---这个实参是一个对象,方法调用的母体就是这个对象。

       通常来讲,基于那个对象的方法可以执行多种操作,方法调用的语法已经很清晰地表明了函数将基于一个对象进行操作。

    6.方法链

        当方法的返回值是一个对象,这个对象还可以再调用它的方法。这种方法调用序列中(通常称为 "链" 或者 "级联")每次的调用结果都是另外一个表达式的组成部分。比如,基于jQuery库,

        //找到所有的header,取得它们id的映射,转换为数组并它们进行排序

        $(":header").map(function(){ return thsi.id }).get().sort();

       当方法并不需要返回值时,最好直接返回this。

    7.this关键字

       this是一个关键字,不是变量,也不是属性名。JS语法不允许给this赋值。

       和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。

       如果嵌套函数作为方法调用,其this的值指向调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式下)就是undefined(严格模式下)。

       很多人误以为调用函数时this会指向调用外层函数的上下文。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都同在一个作用域内。通常使用变量self来保存this。

       例如:

           var o = {              //对象o

              m : function(){    //对象中的方法m()

                  var self = this; //将this的值保存至一个变量中

                  console.log( this ===0 );  //输出true,,this就是这个对象o

                  f();  //调用辅助函数f()

                  function f(){                       //定义一个嵌套函数f()

                     console.log(this === 0);   // "false":this的值是全局对象或undefined

                     console.log(self === 0);   // "true":self指外部函数的this值

                          }

                      }

                 };

    8.构造函数的调用

       如果构造函数没有形参,JS构造函数调用的语法是允许省略实参列表和圆括号的。凡是没有形参的构造函数调用都可以省略圆括号。比如,下面这两行代码就是等价的:

       var o = new Object();

       var o = new Object;

    9."||"运算符

        if(a ===undefined ) a = []; //如果未定义,则使用新数组

        相等于 a = a || [];

        需要注意的是,使用 "||"运算符代替if语句的前提是a必须预先声明,否则a=a||[]会报引用错误,在这个例子中a是作为形参传入的,相当于var a,即已经声明了a,所以这样用是没有问题的。

  • 相关阅读:
    kobject.c 添加注释
    DNS之四---实现DNS的转发功能
    DNS之三-----实现DNS的TCP/UDP功能及子域委派
    DNS之二---实现DNS主从复制
    第十二周----chrony时间同步与Cobbler+PXE自动化安装
    网络时间同步服务和chrony
    第十一周----黑客加入黑名单及将普通用户授权root权限
    第十周--IP监控任务脚本实现
    ELK之十三----kibana dashboard(仪表盘)使用
    vmware虚拟机下linux centos6.6只有lo,没有eth0网卡、随机分配ip地址,固定ip地址等问题
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5810490.html
Copyright © 2020-2023  润新知