為什么這個f value()不能訪問另一個函式內的const num = 3雖然它在那里被呼叫但可以訪問它下面的變數?
function xyz() {
const num = 3
value() // <-- why this *f value()* cannot access the **num** from here
}
function value() {
console.log(num)
}
const num = 100 // <-- but it can access the **num** here even though it's below of it.
xyz()
輸出是 num = 100
我預計輸出將是 num = 3。
uj5u.com熱心網友回復:
讓我們在這里看看你的作用域,你的主作用域有 2 個函式宣告和常量、值的作用域和 xys 的作用域。在值函式中,num 是根作用域中的一個,因為它是其父作用域。將 num 設定為 3 時。您創建了一個新變數,該變數不是值函式中參考的變數。這就是為什么它保留根范圍的原因
uj5u.com熱心網友回復:
因為 JavaScript 定義了一個函式可以通過函式的創建位置而不是呼叫位置來訪問哪些變數。如果你想從呼叫它的地方向函式提供資訊,你可以通過傳遞引數來實作。
考慮這個例子:
function handleInputEvents(selector) {
function showChange(value) {
console.log(`Value for "${selector}" changed to "${value}"`);
}
document.querySelector(selector).addEventListener("input", (event) => {
showChange(event.currentTarget.value);
});
}
handleInputEvents(".first");
handleInputEvents(".second");
<div>
<label>
First:
<input type="text" class="first">
</label>
</div>
<div>
<label>
Second:
<input type="text" class="second">
</label>
</div>
在該代碼中,每次呼叫handleInputEvents都會創建一個新showChange函式。該showChange函式使用兩件事:
selector,它可以訪問,因為它selector是在范圍內創建的,并且value,它可以訪問,因為它value是showChanges;的引數value由呼叫者作為引數提供
該showChanges函式將無法從它被呼叫的地方訪問任何東西(event例如,它不能訪問),但它可以訪問它被創建的范圍內的東西。
有關的:
- JavaScript 中變數的作用域是什么?
- JavaScript 閉包是如何作業的?
uj5u.com熱心網友回復:
因為 num = 3 是 xyz() 的區域變數。
如果你想訪問它,你需要將它作為 value() 函式的引數傳遞。
function xyz() {
const num = 3
value(num) // <-- call it with params *num*
function value(num) {
console.log(num)
}
const num = 100
xyz()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529550.html
標籤:javascript功能
