本文探讨JavaScript中闭包内数组被原型方法修改的现象。通过对比直接调用闭包返回函数与在原型上定义f1、f2方法,分析arr.f2()执行时this指向闭包内的arr2,导致length变为0。文章解释了原型方法如何访问并修改闭包变量,澄清了闭包作用域与原型链调用的关系。
代码片段
JavaScript 闭包与原型方法对数组引用的影响分析
代码示例如下:
var test=(function() { var arr2=[1,2,3,3]; return function(){ return arr2; }; })()
Array.prototype.f1= function () { return []; }
Array.prototype.f2= function () { this.length=0; return this; } 接着通过两种方式进行调用:
一:var arr= test();
console.log(arr.length);输出结果为4
arr.f1();
arr= test();
console.log(arr.length);输出结果为4
这一现象易于理解;
二:var arr= test();
console.log(arr.length);输出结果为4
arr.f2();
arr= test();
console.log(arr.length);输出结果为0
对此感到困惑,为何arr.f2()能够修改test函数内部闭包环境中的arr2变量;