JavaScript 闭包与原型方法对数组引用的影响分析

作者:青柠

时间:2026-10-25

浏览:84

本文探讨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变量;

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章