为什么使用它在函数中声明一个全局变量?

时间:2012-11-03 19:23:29

标签: javascript oop

我有这段代码:

function boo() {
    this.is_global = "Yes!";
}

当我运行boo();时,我在is_global对象中有window,我的意思是is_global进入全局范围。
我希望仅在is_global函数中使用boo

这是正常行为吗?

4 个答案:

答案 0 :(得分:5)

是的,这是正常行为。如果您的函数是全局定义的,this只是window,而window添加的任何内容都是全局的。

答案 1 :(得分:2)

this指的是窗口。如果要参考该功能,请使用:

arguments.callee.is_global = "Yes!";

现在:

window.is_global; //undefined
boo.is_global; //"Yes!"

另一种方法是在向其添加属性时简单地通过自己的名称引用boo。

function boo() {
    boo.is_global = "Yes!";
}

请注意,这会修改原始boo函数对象。如果您希望修改使用它作为构造函数而导致boo的所有实例,请在此处查看其他答案。

答案 2 :(得分:1)

要让this为“被调用的函数”,必须将该函数作为对象构造函数调用(使用new)。

var foo = new boo();

这将创建boo实例,其属性为is_global。这不会在构造函数本身上创建属性。 See a demo

如果您不使用new(或apply之类的方法),则this是“调用该函数的对象”。由于在这种情况下没有对象,因此使用默认对象。在Web浏览器的上下文中,默认对象为window。所以:

var foo = boo();

相同
var foo = window.boo();

this window位于boo内。

答案 3 :(得分:1)

查看MDN's introduction to the this keyword

我想你想声明一个局部变量,所以使用var statement