我需要在函数内部定义一个变量,这个变量必须在原始范围内可见,并且上面有一个范围(它与全局变量不同)。
可以在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
}
答案 0 :(得分:2)
使用ES6可以阻止这些功能的范围。这给出了在特定块中定义的“全局”变量,并使其可以访问此范围中定义的函数。
{
let var1 = 10;
function one() {
//...
}
function two() {
//...
}
}
这使您可以对范围进行简单有效的控制,尤其是在提升和功能方面。
编辑您的编辑:除非您将var2
作为参数传递给函数,否则没有办法将其范围限定为2个函数而没有某种上层范围。 Aka,firstFunction不能访问var2(再次,除非参数化),而mainFunction没有范围。
答案 1 :(得分:0)
secondFunction()
超出firstFunction()
范围,因此您的评论
// must be 20 (must be undefined outside firstFunction() scope)
意味着var2
无法访问secondFunction()
答案 2 :(得分:0)
它会像您在代码中对其进行评论一样工作。函数范围不会传播到全局范围。
为什么不在顶部声明变量?
var var1, var2;
答案 3 :(得分:0)
一种可能是使用静态变量,例如
function firstFunction() {
firstFunction.var1 = 10;
}
// you can access firstFunction.var1 outside the firstFunction()
......但当然这是一种花哨的方式。
答案 4 :(得分:0)
在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/en-US/docs/Web/JavaScript/Closures
答案 5 :(得分:-2)
使用
window.var1
window.var2
代替