理解的问题"这个"在javascript中

时间:2014-12-05 23:59:57

标签: javascript

我有以下功能。我正在阅读的javascript教程说它应该输出2,但我在我的文本编辑器(JS Fiddle)中未定义。

可能是什么原因?这与严格模式与非严格模式有关吗?

function foo(){
    console.log( this.a );
}

var a = 2;

foo(); //should output "2" but I'm getting undefined. Why?

3 个答案:

答案 0 :(得分:3)

那是因为你在JSFiddle创建的函数包装器中运行代码。默认值为onLoad,它将代码放在一个在load事件上运行的函数中。

这使a变量成为该函数的局部变量,而不是全局变量。当您尝试使用this.a访问它时,它会在window.a中查找变量(因为this将指向window对象),但因为变量不是全局的它无法在那里找到。

如果您选择No wrap - in <head>No wrap - in <body>来放置代码,您将获得2作为输出。

答案 1 :(得分:0)

本教程可能假设此代码将在全局对象的上下文中执行,在这种情况下它确实会打印2.您可以在浏览器控制台中复制/粘贴代码段,您可以自己查看输出为2。

但是,如果将代码放在函数中然后执行该函数,代码将打印undefined。我不是100%肯定JSFiddle如何工作的优点,但在你的情况下,这就是正在发生的事情:它代表你把代码放在一个函数中。

答案 2 :(得分:-1)

当您致电this.a时,您正在寻找foo函数原型中的属性。定义var a = 2只是创建一个名为a的新变种。

你想要做的是在foo put this.a = 2内,然后你的控制台将正确输出。另外,如果要分配函数外部的值

var foo = new foo();
    foo.a = 2;

console.log(foo.a);

随时问我问题!