Javascript 为什么要在函数中声明全局变量?

Javascript 为什么要在函数中声明全局变量?,javascript,oop,Javascript,Oop,我有以下代码: function boo() { this.is_global = "Yes!"; } 当我运行boo时;,在窗口对象中有is_global,我的意思是is_global进入全局上下文。 我只希望在boo函数中使用is_global 这是正常的行为吗 是的,这是正常行为。如果您的函数是全局定义的,那么这只是一个窗口,添加到窗口中的任何内容都是全局的。是的,这是正常行为。如果您的函数是全局定义的,则这只是窗口,添加到窗口中的任何内容都是全局的。这指的是窗口。如果要引用该函

我有以下代码:

function boo() {
    this.is_global = "Yes!";
}
当我运行boo时;,在窗口对象中有is_global,我的意思是is_global进入全局上下文。 我只希望在boo函数中使用is_global


这是正常的行为吗

是的,这是正常行为。如果您的函数是全局定义的,那么这只是一个窗口,添加到窗口中的任何内容都是全局的。

是的,这是正常行为。如果您的函数是全局定义的,则这只是窗口,添加到窗口中的任何内容都是全局的。

这指的是窗口。如果要引用该函数,请使用:

arguments.callee.is_global = "Yes!";
现在:

另一种方法是,在向boo添加属性时,只需使用它自己的名称来引用它

function boo() {
    boo.is_global = "Yes!";
}
请注意,这将修改原始boo函数对象。如果您希望修改将boo用作构造函数而产生的所有boo实例,请参见此处的其他答案。

这指的是该窗口。如果要引用该函数,请使用:

arguments.callee.is_global = "Yes!";
现在:

另一种方法是,在向boo添加属性时,只需使用它自己的名称来引用它

function boo() {
    boo.is_global = "Yes!";
}
请注意,这将修改原始boo函数对象。如果您希望修改将boo用作构造函数而产生的所有boo实例,请参见此处的其他答案。

要使其成为被调用的函数,必须使用new作为对象构造函数调用该函数

这将创建一个属性为全局的boo实例。这不会在构造函数本身上创建属性

如果您不使用new或apply之类的方法,那么这就是调用函数的对象。因为在这种情况下没有对象,所以使用默认对象。在web浏览器的上下文中,默认对象是window。因此:

var foo = window.boo();
这是boo中的窗口。

要调用此函数,必须使用new作为对象构造函数调用此函数

这将创建一个属性为全局的boo实例。这不会在构造函数本身上创建属性

如果您不使用new或apply之类的方法,那么这就是调用函数的对象。因为在这种情况下没有对象,所以使用默认对象。在web浏览器的上下文中,默认对象是window。因此:

var foo = window.boo();
这是boo内部的窗口。

请退房

我猜您想声明一个局部变量,所以请使用。

签出


我猜您想声明一个局部变量,所以请使用。

您不能使用参数;最好避免。那么,使用var is_global=Yes有什么区别吗;boo.is_global=Yes@是的,有。如果使用var is_global=Yes;,在函数外部计算boo.is_global将返回undefined。如果使用此处的方法,boo.is_global将返回Yes!。不能使用参数。被调用方是严格模式;最好避免。那么,使用var is_global=Yes有什么区别吗;boo.is_global=Yes@是的,有。如果使用var is_global=Yes;,在函数外部计算boo.is_global将返回undefined。如果使用此处的方法,boo.is_global将返回Yes!。