1

作为一名 JS 学习者,我发现了一件非常有趣的事情,请考虑以下代码。

  this.init = function (e) {
        var container = e.container;

        // slider
        var slider = $("#div1").slider({ orientation: "horizontal", step: 1,
            slide: function () {

                console.log(e.container); // not null
                console.log(container); // null
            }
        });
   };

这是它的名称:

lib.init({ container: $("#container") });

我知道我可以on("slide", {container: container}, function(event, args){...}))用来绑定幻灯片事件并将外部数据传递给它。但是 - 谁能解释为什么两个 console.log 返回的值不同?另外我想知道该技术在技术上是否可以替代on方法?

4

2 回答 2

3

首先,我很惊讶你得到了一个nullfor container。如果您可以发布,实际上希望查看您的日志

其次,这里解释了为什么这不起作用,但不是为什么你得到一个null

这与吊装无关

您正在执行该init功能lib.init({ container: $("#container") });

那时附加的函数this.init = function (e) { ...会以 , 的某个值执行e,可能是一个Event, 所以e被定义并且变量container得到一个值

而在以下第 5 行的代码中,

var slider = $("#div1").slider( ... // u are calling slider

使用选项调用slider函数,其中一个选项是:

slide: function () { // anonymous and will execute later
    console.log(e.container); // not null
    console.log(container); // null
}
  1. 最重要的是,您在slider库的功能范围内,因为它正在执行
  2. 在这里,您附加的功能slide: ...尚未执行。它会,当slide事件发生时
  3. container发生这种情况时,将使用的现值

如果你得到一个null,那么肯定是在重置container,就像在 yckart 的小提琴一样,它不是 null 并且与e.container

于 2013-02-07T16:29:45.163 回答
2

看不出有什么区别......对我来说都是logs平等的:http: //fiddle.jshell.net/WJ2s8/

于 2013-02-07T16:38:20.377 回答