자바 스크립트는 범위 내부에서 값을 쉽게 가져올 수 없습니다. 당신은 더 넓은 범위에 doSomething
를 선언 할 수
:
function doSomething() {
// ...
}
function func(e) {
doSomething(); // This works! `func` has a reference to `doSomething`
}
doSomething(); // This also works! `doSomething` is declared in this scope.
또한 내부 범위에서 값을 반환 할 수 있습니다! 우리는 여전히 원래의 값과 함께, doSomething
을 반환 할 수 있습니다이 경우
function func(e) {
function doSomething() { /* ... */ }
return 'important value!!';
}
:
function func(e) {
function doSomething() { /* ... */ }
return {
value: 'important value',
doSomething: doSomething
};
}
var funcResult = func(/* some value */);
var originalValue = funcResult.value;
var doSomething = funcResult.doSomething;
// Now we have the original value, AND we have access to `doSomething`:
doSomething(); // This works
때때로 외부 기능이 이미 다른 값을 반환에 필요한
를 예를 들면 다음과 같습니다 "주입"이란 무엇을 의미합니까? 특정 페이지에서 JS를 조작하는 userscript/browser 확장 프로그램을 만들려고하십니까? 네, 당신은 당신이 원하는대로 할 수는 있지만, doSomething을 참조 할 때만 변경할 수는 없습니다. – Bergi
예, 필자는 userscript를 작성 중이며 웹 페이지의 일부 기능에 연결하려고합니다. 이를 위해 익명 함수 범위 안에있는 함수에 대한 원래 참조를 변경해야합니다. – user1617735
가장 좋은 방법은 스크립트 로딩을 가로 채고 소스를 변경 한 다음이를 평가하는 것입니다. – Bergi