JavaScript高级编程 5.5-6

1.function是对象、创建的也是对象引用

三种创建方式 最后一种不推荐
M1:

function func(){
  alert("使用很普遍的函数创建方式");
}

M2:

var func=function(){
  alert("直接储存在变量当中");
 }

M3:

var func=function("参数1","参数2","参数n","alert("不要花括号,直接创建")");

2. 在代码运行之前,解析器经过 代码提升的过程 首先将函数声明创建出来 确保函数能够正常使用 再将声明函数提到顶部 然后执行

函数调用在函数创建之前,结果并不会出错。

var Vsum=sum(10);
alert(Vsum); 
function sum(maxV){
  "use strict"
  for(var i=0;i<maxV;i++){
    var sum+=0;
  }
  return sum;
}

另一种情况就会出错。

var Vsum=sum(10);
alert(Vsum); 
var sum=function(maxV){
  "use strict"
  for(var i=0;i<maxV;i++){
    var sum+=0;
  }
  return sum;
}    //unexpected identifier
出错的原因就是因为函数创建位于顶部,但是函数的声明不是

3.函数内部拥有argument和this俩个特殊对象

argument是保存拥有它的函数的参数
argument拥有一个属性callee、它是一个指针 能够指向拥有argument对象的函数

这个方法可以用来解耦合 经典例子 递归实现阶乘

  alert(factorial(10));
  function factorial(Vmax){   //Vmax>0
      if(Vmax<=1)return 1;
      else{
        return Vmax*factorial(Vmax-1);  
  }
 }
利用arguments节耦合
  alert(factorial(10));
  funciton factorial(Vmax){
    if(Vmax<=1)return 1;
    else{
      return Vmax*arguments.callee(Vmax-1);
      }
  }
但在严格模式下使用会出错

4. this对象 类似java和c#中的this 都是指向当前的作用域 当没有其他作用域时候 指向window 例子:

5. ECMAScript5还定义函数对象另一个属性caller、它保存着引用当前函数的函数的引用、如果为window则为null 实例:

除此之外、ECMAScript还为每个函数对象定义了length和prototype属性方法。length表示每个函数对象希望能接受几个参数 prototype则是真正保存着函数中所有实例方法真正所在 实际上toString和ValueOf都是保存在prototype名下 只是通过各自的实例对象调用罢了

每个函数都包含着非继承而来的方法 apply和call方法

apply和call方法都接受俩个参数
第一个参数都接收作用域this
第二个参数apply可以接收数组参数或者arguments(保存当前函数的参数) call则只能接收按顺序排列单个排列的参数

需要注意的是 apply和call最主要用作扩充函数的作用域、而非传递函数。
window.color="red";//全局属性
var o_bule={
    color:"bule"
}
 function toStringColor(){
         console.log(this.color);
}
toStringColor.call(this);//red
toStringColor.call(o_bule);//bule
toStringColor().call(window); //red
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 继承 一、混入式继承 二、原型继承 利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的...
    magic_pill阅读 1,082评论 0 3
  • 我的文章会在我的Blog同步更新,Blog刚搭了几天,用于记录我的学习过程:Million 5.5Function...
    般犀阅读 362评论 0 6
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 现代人好像都很忙,比如我自己。每天早上起床要先忙一家人的早餐,吃完收拾完时间已经不早了,自己再匆匆梳洗后上班。到了...
    于小鱼_sy阅读 222评论 0 0
  • 天气雷阵雨 今天的心情就好像今天的天气一样,时好时坏。今天看了电视剧《我的前半生》就好像广播说的一样这部剧确实不...
    soffel阅读 208评论 0 0