6

我继承了一些我不理解的代码。

function updateQty () {
        obj.find('.inputAmount').html(qty);
        input.val(qty);

        $.each(change_actions, function() {
            this(qty);
        });
    }

函数内部到底发生了.each什么?我以前从未见过this(var)这样用过。

4

3 回答 3

5

thisinside$.each指的是您正在循环的当前对象。

对象必须是一个函数才能传递一些东西给它。

于 2013-07-24T19:53:28.827 回答
3

您可以关联以下示例:

var change_actions = [
    function(x) { alert(x + 1); },
    function(x) { alert(x + 2); }
];

var qty = 5;
$.each(change_actions, function() {
   this(qty); 
});

JSFiddle:http: //jsfiddle.net/fuyz2/

于 2013-07-24T19:55:56.600 回答
3

作者使用绑定设置了自己的事件,因此change_actions当数量发生某些事情时,很可能会订阅运行的函数。

尝试这样的事情:

// initialize with a value
var actions = [
    function(x){ console.log('I see a new x: ' + x); }
];

// add actions "later"
actions.push(function(x){ console.log('Yup, a new x: ' + x); });

// Then execute them:
$.each(actions, function(){
  this(4);
});

// add another one still
actions.push(function(x){ console.log(x + ' looks new'); });

// re-iterate over them
// Then execute them:
$.each(actions, function(){
  this(5);
});

结果:

// first iteration (only 2 subscribed events)
[15:56:50.030] "I see a new x: 4"
[15:56:50.030] "Yup, a new x: 4"

// second iteration (now we have 3, one was added later)
[15:56:50.030] "I see a new x: 5"
[15:56:50.030] "Yup, a new x: 5"
[15:56:50.030] "5 looks new"  // <-- new subscription

把它想象成click事件以及如何通过绑定到$('element').click(). 每次点击发生时,都会触发任何订阅的事件。

于 2013-07-24T19:57:54.673 回答