我是 javascript 的初學者,我試圖了解在重新定義變數值的函式中呼叫的函式。這是代碼
var a;
function app2(a) {
var a = 8;
return a
}
function app(a) {
var a = 7;
app2(a)
return a
}
console.log(app(a));
當我運行代碼時,它仍然顯示 7 作為輸出。我認為它將是 8,因為我已經在函式app2中呼叫了該app函式。為什么值沒有變成 8?我應該怎么做更新嵌套函式內的變數值?提前致謝
uj5u.com熱心網友回復:
1)你只能得到8,如果你正在服用的價值app2和內部使用它app。
使用var關鍵字宣告的變數是函式范圍的,并且在宣告它的特定函式之外是不可見的。
a宣告 in 在app2內部是不可見的,app除非您沒有app2從app2內部回傳值并且不使用內部的回傳值app(兩個條件都應該滿足才能使用它)
var a;
function app2(a) {
var a = 8;
return a;
}
function app(a) {
var a = 7;
a = app2(a); // reassign the returned value from app2
return a;
}
console.log(app(a));
2)如果你是回傳它而不是捕獲它,那么它是沒有用的。你也可以這樣做:
顯示代碼片段
var a;
function app2(a) {
var a = 8;
return a;
}
function app(a) {
var a = 7;
return app2(a); // Directly return the value of app2 returned value
}
console.log(app(a));
uj5u.com熱心網友回復:
我認為您所看到的主要罪魁禍首是您正在命名函式的引數,a并且全域名為a. 對此進行試驗時,您會期望洗掉除全域關鍵字之外的a = 8所有var關鍵字。這不會發生,因為名為 named 的引數a遮蔽了全域var a. 當您var在函式中本地使用關鍵字時,您實際上是在告訴 javascript 您要宣告本地函式范圍var a,而不是參考 global var a,因此任何更改都保留在函式范圍內。
看看這個片段:
var a;
function app2(b) { // changed argument name from `a` to `b`
a = 8; // removed var keyword here
return a
}
function app(b) { // changed argument name from `a` to `b`
a = 7; // removed var keyword here
app2(a)
return a
}
console.log(app(a)); // output: 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387590.html
標籤:javascript 节点.js 算法 功能
