在Javascript中将函数赋值给变量,并将变量赋值给函数(?)

在Javascript中将函数赋值给变量,并将变量赋值给函数(?),javascript,function,var,Javascript,Function,Var,我通过剖析我以前使用过的其他人编写的一些脚本来学习javascript(stackoverflow是必不可少的!)。这段代码(为了使代码更容易阅读,我从中间剪了很多代码,所有的注释都是我的)来自jquery插件 我不确定作者在这里做什么: function EventManager(options, _sources) { //called using .call() var t = this; t.isFetchNeeded = isFetchNeeded; //?? as

我通过剖析我以前使用过的其他人编写的一些脚本来学习javascript(stackoverflow是必不可少的!)。这段代码(为了使代码更容易阅读,我从中间剪了很多代码,所有的注释都是我的)来自jquery插件

我不确定作者在这里做什么:

function EventManager(options, _sources) { //called using .call()
    var t = this;

    t.isFetchNeeded = isFetchNeeded;  //?? assign the function "isFetchNeeded" to the variable (not the value returned by the function)??

    var trigger = t.trigger;    //?? namespace??
}

function View(element, calendar, viewName) {
    var t = this;   

    function trigger(name, thisObj) {
        return calendar.trigger.apply(
                 calendar,
                 [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t])
        );
    }
}
首先,我猜测
this.foo=bar
正在将函数“bar”分配给当前对象中名为“isFetchNeeded”的变量(还不确定为什么要这样做.speed?)

其次,行
var foo=this.bar
让我难堪。看起来这可能是某种名称空间魔法

我对第一行的想法正确吗?下一行是干什么的


谢谢

变量
引用调用函数的上下文。在这种情况下(假设代码在web浏览器中运行)是
窗口
对象。第一行简单地将函数
isFetchNeeded
指定为
对象的方法。第二行将
this
的成员变量
trigger
的值分配给函数
EventManager
this.foo=bar
的本地变量,将
bar
的值分配给名为
foo
的对象成员。这实际上可以是一个函数定义,也可以是一系列其他内容

var trigger=t.trigger
所做的是在
EventManager
函数的范围内声明一个名为
trigger
的变量。还有在较低范围内定义的其他功能,即
pushload
popLoading
。这些不是对象成员,因此在这些函数中使用
this.trigger
将不起作用。
var触发器
声明使其可在这些函数中访问

我并不声称自己是有史以来最好的JS程序员,所以我不能说他所做的是否有意义,但你可以看到
EventManager.JS
是如何实际使用的(在
Calendar.JS
中):

他实际上并没有创建一个
EventManager
对象,而是用
Calendar
对象调用它的构造函数<代码>日历确实定义了
触发器
,这就是
var trigger=t.trigger
EventManager
内部工作的原因。同样,这条线

var isFetchNeeded = t.isFetchNeeded;

Calendar.js
中,获取
isFetchNeeded
方法“back out”
EventManager
,并允许在
Calendar
范围内调用它。

老实说,您需要一个好的Javascript入门,但并不完全需要。我建议您在10分钟内使用Spencer Tippings的Javascript。Javascript中没有“名称空间”,只有对象属性。你需要把它们和变量区分开来。@Bergi:当然,你是对的。我在想“范围”,但写了“名称空间”@nannoolei:谢谢你的参考。它看起来确实是一个很好的资源。
既不是变量,也不可能引用全局对象-这些函数都是构造函数。请注意,
此引用函数调用的上下文的变量
不正确。函数的
参数的值可以是任何值(在严格模式下)或任何对象。它完全由调用设置,完全独立于调用的执行上下文。这是一个很好的解释。谢谢我不是在考虑较低的范围。现在我明白了为什么作者称第一种类型为“出口”,第二种类型为“进口”。
var isFetchNeeded = t.isFetchNeeded;