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