Javascript並不容易從範圍內獲取值。
您可以在更廣的範圍內聲明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.
您還可以從內部範圍的返回值!例如:
function func(e) {
function doSomething() {
// ...
}
// Note that we are not invoking `doSomething`, we are only returning a reference to it.
return doSomething;
}
var doSomething = func(/* some value */);
// Now you got the reference!
doSomething();
有時已經需要返回另一個值你的外在功能:
function func(e) {
function doSomething() { /* ... */ }
return 'important value!!';
}
在這種情況下,我們仍然可以返回doSomething
,與原來的值一起:
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的用戶腳本/瀏覽器擴展?是的,你可以做任何你想做的事情,但是你不能僅僅通過引用來改變'doSomething'。 – Bergi
是的,我正在編寫一個用戶腳本,並希望與網頁上的某些功能掛鉤。爲此,我需要將原始引用更改爲匿名函數範圍內的函數。 – user1617735
你最好的選擇是攔截腳本加載,更改它的源代碼並評估它。 – Bergi