JavaScript 코드를 리버스 엔지니어링하는 동안 다음 기능을 발견했습니다.
으아악제가 보기에는 중복되어 보입니다. 코드는 다음과 같습니다:
arr
. arr
를 반환하도록 함수 내부의 함수를 재정의하세요. return fun1()
을 사용하여 함수 자체의 결과를 반환하는 것은 이제 return fun1()
返回函数本身的结果,现在被重新定义为返回 arr
,所以似乎返回 arr
를 반환하도록 재정의되었으므로 그래서 모든 중복 코드를 제거하는 함수를 다시 작성했습니다.
으아악 그러나 이 두 기능이 완전히 다르게 작동한다는 사실에 놀랐습니다
.
fun1()
似乎返回对 arr
的引用,而 fun2()
似乎返回 arr
fun1()
은
fun2()
는 의 복사본을 반환하는 것으로 나타납니다.
다음은 차이점을 설명하는 최소한의 재현 가능한 예입니다.
으아악
마법이 일어난 것 같아요...
fun1()
和 fun2()
fun1()
函数重新定义了(相对)全局的fun1
符号。它将原始函数更改为局部内部函数,该函数封闭了数组。因此,只涉及一个数组,即第一次调用fun1()
이 처음 호출될 때 생성된 배열입니다.귀하의
fun2()
는 호출할 때마다 완전히 새로운 배열을 생성합니다.내부 함수가 로컬에서 선언된
fun1
변수에 할당되도록fun1()
을 변경하면fun1()
,以便将内部函数分配给一个在本地声明的fun1
变量,它将与fun2()
와 동일한 방식으로 작동합니다. 같은.