Javascript 选择全局范围而不是局部范围
我想知道,在Javascript中是否有任何方法可以告诉编译器要使用哪个范围变量 就像在python中附加关键字Javascript 选择全局范围而不是局部范围,javascript,Javascript,我想知道,在Javascript中是否有任何方法可以告诉编译器要使用哪个范围变量 就像在python中附加关键字global,编译器知道您正在使用global one 除了使用不同的名称外,在Javascript中是否还有其他方法可以实现相同的功能 (在下面的示例中,我试图寻找全局“红色”,但它一直被参数“绿色”所遮蔽。) const color=“红色” 常量printColor=(颜色)=>console.log(颜色) printColor(“绿色”)将全局变量直接附加到窗口对象: w
global
,编译器知道您正在使用global one
除了使用不同的名称外,在Javascript中是否还有其他方法可以实现相同的功能
(在下面的示例中,我试图寻找全局“红色”,但它一直被参数“绿色”所遮蔽。)
const color=“红色”
常量printColor=(颜色)=>console.log(颜色)
printColor(“绿色”)
将全局变量直接附加到窗口对象:
window.color=“红色”
const printColor=(color)=>console.log(color,window.color)
printColor(“绿色”)
将全局变量直接附加到窗口对象:
window.color=“红色”
const printColor=(color)=>console.log(color,window.color)
printColor(“绿色”)
我喜欢@symlink的答案,但只是作为附加信息
一种方法是将相应的this
的上下文绑定到函数
例如,由于var
会将变量(在严格模式之外)提升到窗口
,因此您可能会执行以下操作:
var color=“蓝色”;
常量printColor=function(){
console.log(this.color)
}
printColor.bind(窗口)()
bind({color:“green”})(
我喜欢@symlink的答案,但只是作为附加信息
一种方法是将相应的this
的上下文绑定到函数
例如,由于var
会将变量(在严格模式之外)提升到窗口
,因此您可能会执行以下操作:
var color=“蓝色”;
常量printColor=function(){
console.log(this.color)
}
printColor.bind(窗口)()
bind({color:“green”})(
应该以公平的方式与Python进行比较
在Python中,您有:
x=1#全局
def测试(x):
打印(x)
。。。您不能插入global
关键字以使该print(x)
作用于全局x
,因为您已经将该名称定义为本地名称(参数)
在Python世界中继续一段时间。这将作用于全局变量:
x=1
def test():
打印(x)#全球
…但一旦有赋值,变量将被视为局部变量:
x=1
def test():
x=2#局部
打印(x)
要覆盖此行为,请使用global
:
x=1
def test():
全球x
x=2#全局
打印(x)
现在,回到JavaScript。在这里,您可以玩单词var
要在函数中使用变量,只需省略在其中使用let
、const
或var
对其进行定义:
var x = 1;
function test() {
console.log(x); // global
}
要将变量用作局部变量,请使用var
、let
或const
:
var x = 1;
function test() {
var x = 2; // local
console.log(x);
}
所以也没什么不同。在Python中使用global
关键字时,在JavaScript中不使用var
、let
或const
,如果省略Python的global
,则在JavaScript中使用var
、let
或const
globals()
与globalThis
Python有globals()
,当您还有一个同名的局部变量时,可以使用它引用全局变量:
x=1
def测试(x=2):
globals()['x']=3#修改全局变量
在JavaScript中,您可以通过全局对象执行此操作,全局对象在浏览器上下文中是window
。另请参见更新的。因此,在浏览器上下文中,您可以这样做(但它需要var
):
不过,最好将全局变量定义为对象的一部分:
var myglobals = { x: 1 };
function test(x = 2) {
myglobals.x = 3 // mutates myglobals
}
应该以公平的方式与Python进行比较
在Python中,您有:
x=1#全局
def测试(x):
打印(x)
。。。您不能插入global
关键字以使该print(x)
作用于全局x
,因为您已经将该名称定义为本地名称(参数)
在Python世界中继续一段时间。这将作用于全局变量:
x=1
def test():
打印(x)#全球
…但一旦有赋值,变量将被视为局部变量:
x=1
def test():
x=2#局部
打印(x)
要覆盖此行为,请使用global
:
x=1
def test():
全球x
x=2#全局
打印(x)
现在,回到JavaScript。在这里,您可以玩单词var
要在函数中使用变量,只需省略在其中使用let
、const
或var
对其进行定义:
var x = 1;
function test() {
console.log(x); // global
}
要将变量用作局部变量,请使用var
、let
或const
:
var x = 1;
function test() {
var x = 2; // local
console.log(x);
}
所以也没什么不同。在Python中使用global
关键字时,在JavaScript中不使用var
、let
或const
,如果省略Python的global
,则在JavaScript中使用var
、let
或const
globals()
与globalThis
Python有globals()
,当您还有一个同名的局部变量时,可以使用它引用全局变量:
x=1
def测试(x=2):
globals()['x']=3#修改全局变量
在JavaScript中,您可以通过全局对象执行此操作,全局对象在浏览器上下文中是window
。另请参见更新的。因此,在浏览器上下文中,您可以这样做(但它需要var
):
那会更好