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){...}))スライドイベントをバインドして外部データを渡すために使用できることを知っています。しかし、-2つの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関数はオプションで呼び出されており、オプションの 1 つは次のとおりです。

slide: function () { // anonymous and will execute later
    console.log(e.container); // not null
    console.log(container); // null
}
  1. 最も重要なのはslider、ライブラリが実行されているため、ライブラリの機能の範囲内にあることです。
  2. ここでは、アタッチしslide: ...ている関数はまだ実行されていません。slideイベントが発生すると、
  3. その場合、 の現在価値containerが使用されます。

を取得している場合は、 nullyckartによるここcontainerのフィドルのように、null ではなく、次と同じです。e.container

于 2013-02-07T16:29:45.163 に答える
2

違いがわかりません...私にとってはどちらもlogs同じです:http://fiddle.jshell.net/WJ2s8/

于 2013-02-07T16:38:20.377 に答える