[英]Can I define a javascript variable (not global) inside a function and this variable be visible ouside his scope?
我需要在函數內定義一個變量,並且該變量必須在其原始作用域和上面的一個作用域中可見(與全局變量不同)。
有可能用JavaScript嗎?
例如。
function mainFunction () {
function firstFunction() {
var var1 = 10;
secondFunction();
console.log(var2); // must be 20 (must be undefined one scope above firstFunction())
console.log(var1); // must be 10 (of course)
}
function secondFunction() {
var var2 = 20;
console.log(var2); // must be 20 (of course)
console.log(var1); // must be undefined
}
firstFunction();
console.log(var2); // must be undefined
console.log(var1); // must be undefined
}
使用ES6,您可以限制這些功能的作用域。 這給出了在特定塊中定義的“全局”變量,並使該范圍中定義的函數可以訪問它。
{
let var1 = 10;
function one() {
//...
}
function two() {
//...
}
}
這使您可以對范圍進行簡單有效的控制,尤其是在起吊和功能方面。
編輯以進行編輯:除非將var2
作為參數傳遞給函數,否則沒有某種上級作用域就無法將其范圍限定為2個函數。 同樣,如果mainFunction沒有作用域,則firstFunction無法訪問var2(再次,除非已設置參數)。
secondFunction()
在firstFunction()
范圍之外,因此您的評論
// must be 20 (must be undefined outside firstFunction() scope)
意味着var2
永遠無法被secondFunction()
訪問
就像您在代碼中注釋了它一樣,它將起作用。 功能范圍不會傳播到全局范圍。
為什么不在頂部聲明變量?
var var1, var2;
一種可能是使用靜態變量,例如
function firstFunction() {
firstFunction.var1 = 10;
}
// you can access firstFunction.var1 outside the firstFunction()
...但是,當然,這是一種花哨的方式。
在javascript中,可以使用閉包來訪問私有變量。 閉包是即使父函數已關閉,也可以訪問父作用域的函數。
function mainFunction () {
function firstFunction() {
var var1 = 10;
var var2 = secondFunction();
console.log(var2); // must be 20
console.log(var1); // must be 10 (of course)
}
function secondFunction() {
var var2 = 20;
console.log(var2); // must be 20 (of course)
return var2;
}
firstFunction();
// console.log(var2); // must be undefined
// console.log(var1); // must be undefined
}
mainFunction();
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
采用
window.var1
window.var2
代替
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.