为什么我不能用“这个”使用IIFE?

时间:2015-12-09 07:15:16

标签: javascript jquery

我的测试代码:

var colorChanged = function (c) {
  //valid syntax:
  (function (x) {
    x.css('color', '#f00')
  })($('.' + c));

  //invalid syntax:
  (function (this) { //Uncaught SyntaxError: Unexpected token this        
    this.css('color', '#f00')
  })($('.' + c));  
};

<div class="demo">Div text</div>
<button onclick="colorChanged('demo')">Change color</button>

我引用了Immediately-invoked function expression,但没有提到在这种情况下使用this

我的问题是:在示例中有没有办法将this用作元素(this = $('.' + c))?

2 个答案:

答案 0 :(得分:2)

是的,有一种方法可以在IIFE中使用this,您可以在致电IIFE之前将thisValuebind()绑定。

(function() {
    this.css('color', '#f00')
}).bind($('.' + c))();  

答案 1 :(得分:1)

你可以使用bind()或call()或apply()并传递&#39;这个&#39;通过它们,您的范围已经更改为&#39;这个&#39; ...

在javascript中使用这些函数总是很好的做法,而不是将它附加到函数中......

最好的选择是调用你的代码......

(function() {
    this.css('color', '#f00')
}).call($('.' + c));

在javascript中使用click处理程序,使代码更清晰,可以使编码结构更好,你也可以在jQuery中使用多个选项来保持HTML清洁,如果需要更多的选择器来处理这个功能...