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 创建的函数无法形成闭包,因为这种方式创建的函数不包含对函数创建时的词法环境的引用,而是直接引用全局环境