闭包和原型真的不是一回事。
原型是创建新对象的模板(简而言之);例如:
var someType = function()
{
};
someType.prototype.someOtherFunction = function()
{
};
每当您创建 的实例时sometype
,它都会someOtherFunction
附加一个作为函数的成员。此外,其他实例也获得了价值。所以很容易将函数“添加”到字符串中,例如:
String.prototype.doSomething = function()
{
}
现在所有的字符串都得到了这个方法。
闭包实际上是另一个作用域内的子作用域,它是从外部作用域到内部作用域捕获或关闭变量的行为,使其成为闭包。
例如:
function something()
{
for(var j = 0; j < 10; j++)
{
setTimeout(function()
{
alert(j);
}, 25);
}
}
在这种情况下, 的值j
被setTimeout
回调关闭。在任何其他上下文中,j
不会存在于内部函数内部(因为它既不是全局函数也不是函数的参数),但是因为它是以这种方式引入的,所以内部函数被称为关闭变量引用。