javascript - 访问外部函数中定义的属性

时间:2016-11-08 16:31:58

标签: javascript closures

我已经尝试过闭包并发现了意想不到的行为。有人可以解释为什么这段代码会这样工作吗?

var that=this

我不明白,为什么我总是使用findInt <- function(value, start, end) { start < value & end > value } indx <- findInt(81, DF$Start, DF$End) DF$Result[indx] #[1] "FL91" "FL12" 短语,如果可以直接从内部函数访问函数属性。

jsfiddle https://jsfiddle.net/5co6f707/

2 个答案:

答案 0 :(得分:5)

它显示'hello',因为您没有处于严格模式,因此this是全局window对象而不是未定义,a成为全局变量为this.a分配值。由于a是一个全局变量,所以它随处可见。您可以在脚本的最后添加alert(a);,它也会显示'hello'https://jsfiddle.net/5co6f707/1/

它不应该工作(并且不在严格模式下)并且不应该使用它。如果您打算使用foo作为构造函数,那么在调用它时应该使用new关键字(这会破坏您的代码,但是以一种好的方式)。

答案 1 :(得分:-1)

执行此代码时:

o=foo();

foo在全局上下文中执行,所以这一行:

this.a='hello';

a属性添加到全局对象 - window

当您像这样调用aaa函数时:

o.aaa()

变量a未在函数中定义,因此它在范围链上查找并在窗口中找到:

function() {
     return a; // found on window.a
}

所以返回window.a