>  Q&A  >  본문

내부적으로 재정의된 Javascript 함수 동작의 차이점

JavaScript 코드를 리버스 엔지니어링하는 동안 다음 기능을 발견했습니다.

으아악

제가 보기에는 중복되어 보입니다. 코드는 다음과 같습니다:

  1. 배열을 선언하세요 arr.
  2. arr를 반환하도록 함수 내부의 함수를 재정의하세요.
  3. return fun1()을 사용하여 함수 자체의 결과를 반환하는 것은 이제 return fun1() 返回函数本身的结果,现在被重新定义为返回 arr,所以似乎返回 arr를 반환하도록 재정의되었으므로
  4. 를 반환하는 것처럼 보입니다.

그래서 모든 중복 코드를 제거하는 함수를 다시 작성했습니다.

으아악 그러나 이 두 기능이 완전히 다르게 작동한다는 사실에 놀랐습니다

.

fun1() 似乎返回对 arr 的引用,而 fun2() 似乎返回 arrfun1()

에 대한 참조를 반환하는 것으로 나타나고 fun2()

의 복사본을 반환하는 것으로 나타납니다.

다음은 차이점을 설명하는 최소한의 재현 가능한 예입니다.

으아악

마법이 일어난 것 같아요...

fun1()fun2()

의 차이점은 무엇인가요? 🎜🎜
P粉805931281P粉805931281283일 전430

모든 응답(1)나는 대답할 것이다

  • P粉101708623

    P粉1017086232024-01-11 12:15:16

    fun1()函数重新定义了(相对)全局的fun1符号。它将原始函数更改为局部内部函数,该函数封闭了数组。因此,只涉及一个数组,即第一次调用fun1()이 처음 호출될 때 생성된 배열입니다.

    귀하의 fun2()는 호출할 때마다 완전히 새로운 배열을 생성합니다.

    내부 함수가 로컬에서 선언된 fun1 변수에 할당되도록 fun1()을 변경하면 fun1(),以便将内部函数分配给一个在本地声明fun1变量,它将与fun2()와 동일한 방식으로 작동합니다. 같은.

    회신하다
    0
  • 취소회신하다