读JavScript语言精粹第四章—函数(1)

1. 什么是函数?

  • 函数是功能代码块,当我们多次使用同一段代码时,就可以把它封装成一个函数,允许在代码里随调随用,利用函数封装来避免重复键入大量相同的内容,可以使得代码更高效,高级。
  • 因为函数是对象,所以它也可以被当做值来使用,可以存储在一个变量,数组和对象中。
  function  R(name,age){
     this.name=name;
     this.age=age;
     }
     var obj=new Object();
     const obj=objectFactory(P,'大毛',3);
  • 因为函数是对象,所以它也可以调用方法。

  • 函数可以被当做参数传递给其他函数,函数也可以再返回函数。

var DD=function(){
    curClick('id3');
    }
    function curClick(id){ 
        console.log(id); 
      } 
      DD();
      //输出结果:id3
  • 在JavaScript中,函数是对象。对象就是“名/值”对的集合,并且
    自带一个连接到原型对象的隐藏链接。
    下面的代码中,AA这个函数拥有两个“名/值”对集合。(属性名:name,属性值:小鸭鸭)
function AA(){
    name:'小鸭鸭',
    color:'Pink'
}
  • 每个对象都会关联一个原型对象,并可以从中继承相应的属性。对象字面量产生的对象连接到Object.prototype,而函数对象是连接到 Function.prototype,然后该原型对象本身连接到 Object.prototype
    简单示意图:object --> Object.prototype <-- Function.prototype <-- function()

2. JS中的闭包(Closure)?
原文:

一个内部函数自然可以访问自己的参数和变量,同时它也能方便地访问它被嵌套在其中的那个函数的参数与变量。通过函数字面量创建的函数对象包含一个连到外部上下文的连接。这就被称为闭包。

对闭包的描述可以说是相当拗口了,让我这个新手实在是难以下咽(o(╥﹏╥)o)
看了许多别人的文章,其中比较简单易懂的说法是:[函数]和[函数内部能访问到的变量](也叫环境)的总和,就是闭包。
上例子:

function A(){
    var local='变量'
    function a(){
    console.log(local)
    }
    return a;
    }
    var c=A();
    c();

运行结果:
在这里插入图片描述
在上述例子中,变量local和函数a构成了一个闭包
个人答疑解惑 :

  • 为什么需要 return a 这句代码呢?
    这句代码的目的是让外面可以访问到a这个函数,有它才可以使用这个闭包。
    所以 return a 只是为了 local 能被使用,跟闭包无关。
  • 为什么要函数套函数呢?
    因为需要使用局部变量,把local这个变量放在a函数中,使得它从一个全局变量变成了一个局部变量。要访问local就要通过a函数来间接访问,这样可以保护内部的变量不收外界干扰。
  • 还有一点:使用 new Function 创建的函数无法形成闭包,因为这种方式创建的函数不包含对函数创建时的词法环境的引用,而是直接引用全局环境
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值