찾다

 >  Q&A  >  본문

함수 본문 내에서 함수 이름을 다시 할당하면 동작이 변경되는 이유는 무엇입니까?

일부 JavaScript를 리버스 엔지니어링하는 동안 이 기능을 발견했습니다.

으아악

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

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

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

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

.

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

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

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

다음은 차이점을 설명하기 위해 재현 가능한 최소한의 실행 가능한 예입니다.

으아악

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

fun1()fun2()

의 차이점은 무엇인가요? 🎜🎜
P粉270891688P粉270891688313일 전451

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

  • P粉037880905

    P粉0378809052024-01-17 17:06:28

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

    반면에 fun2()는 호출될 때마다 새로운 배열을 생성합니다.

    fun1()을 변경하여 내부 함수를 로컬 선언 fun1 변수에 할당하면 fun1() 更改为将内部函数分配给一个局部声明的 fun1 变量,它将与 fun2() 과 동일하게 동작합니다.

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