JavaScript语言精粹学习笔记之函数

- 首先,要理解什么是函数

        函数,是一种可以执行的对象,函数也是对象,所以函数也有prototype属性,他最终指向Funtion.prototype,而这个原型最后指向Object.prototype, 因为函数是对象,所以也可以当做一个值来使用,这是和其他语言很大的一个不同之处

- 函数字面量

        var f=function(){}

        函数字面量是将一个函数通过=赋值给变量创建的函数对象(注意是函数对象,这和函数声明有点不一样),所有能出现表达式的地方都能出现函数字面量,函数名省略时,该函数为匿名函数,函数中声明函数会形成闭包,函数既可以访问内部的变量,也可以访问函数外面上下文的变量

- 函数的调用

        函数有四种调用模式

        1.方法调用:作为一个对象的方法被调用,Obj.function()  this会指向调用对象

        2.普通调用:即直接调用,function()  this 会指向全局

        3.构造器调用:作为一个对象的构造函数被调用 a=new function() this 指向这个对象

        4.apply调用:讲一个数组引用作为参数的特殊调用方法 function.apply() 可以自己指定this的指向

- 函数参数

        JavaScript中函数中有一个arguments的对象,这是一个形似数组确不是数组的对象,保存着函数的参数

        可以通过改变其中的值达到认为改变函数参数的效果,甚至可以访问到未传入实参的形参,为undefinded

        这个对象有length属性

- 返回值

        用法和其他语言基本一样,有两个特殊情况:

        1.未写返回值时返回undefinded

        2.当以new调用时,且返回值不是对象,返回this

- 异常处理

        try{·······}

                catch{·····}

        当try中的代码抛出异常,catch中的代码就会执行

        throw{·····} 语句抛出异常其中有可识别异常类型的name属性和描述massage属性

- 给类型添加方法:object.prototype 和 function.prototype 

- ES5是没有块级作用域的,只有全局作用域和函数作用域ES6中添加了let和const命名方式后,有了块级作用域

- 闭包

        前面提到了作用域的概念,通常在外部是无法访问函数作用域内部的东西的,我们可以在函数内部再创建一个函数,用这个函数去访问该函数内部的东西,这就形成了闭包

        JavaScript有一套垃圾回收机制,当一个值失去引用时,他所占的内存就会被释放,而闭包会阻止回收

function f1(){

    var n=1;

    function f2(){
      console.log(n);
    }

    return f2;

  }

        因为函数f1内部定义了一个函数f2访问了f1中的数据,他会给f2留一个数据的引用,所以这个数据就不会被回收,这就形成了闭包,这个数据就会被保留下来,但是正是因为这样,会造成内存泄露

        本来外部是无法访问f1中的变量的,但是在函数内部定义一个函数f2访问,然后f1返回一个f2的引用,于是外部就可以访问f1中的变量了

        闭包可以很好的用来创建模块,解决var变量全局污染的问题,在ES6中有了let和const变量,有了块级作用域,也可以很好的解决全局污染和一些其他的问题

- 回调函数

        函数使得不连续的请求变的容易,很容易产生同步请求导致客户端假死状态,回调函数是一种异步方式,即将函数作为参数传入一个函数,传入的函数会在函数执行之后再执行,形成异步请求

- 级联

        书中并没有很好的讲清楚级联的应用,看起来很难,其实不然,级联就是一个函数如果没有返回值,可以给他返回this,你就可以接着调用函数,比如说

        一个对象 f 中有三个函数 a() , b() , c()

        他们都是返回this

        那么你可以

        f.a().b().c() 同时调用了三个函数 常用于dom的处理上

 - 套用

        函数作为一个值可以作为参数传入函数,形成一个新函数,用函数创建函数,减少了很多工程

- 记忆

        如果一个结果要反复计算,可以用一个对象很方便的将其保存,减少计算次数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值