我已经尝试过闭包并发现了意想不到的行为。有人可以解释为什么这段代码会这样工作吗?
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/
答案 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
。