在声明的函数中使用'this'时严格违反,不违反函数表达式

时间:2012-04-13 00:24:50

标签: javascript jslint

为什么jslint会抱怨在声明的函数中使用它?

function navigate() {
    var id = $(this).attr('id');
}

给我:

#1 Strict violation.
var id = $(this).attr('id'), // Line 18, Pos 20

然而jslint没有抱怨:

var navigate = function () {
    var id = $(this).attr('id');
}

我以相同的方式使用它们,它们都在浏览器中正常工作。

view.on('click', navigate);

仅供参考,我使用event.target代替了警告,但我想知道区别是什么。

function navigate(event) {
    var id = $(event.target).attr('id'); // no complaint
}

1 个答案:

答案 0 :(得分:3)

看看这个链接: https://github.com/shichuan/javascript-patterns/blob/master/general-patterns/function-declarations.html

从这里出色的参考资料: http://shichuan.github.com/javascript-patterns/

提供了这些原因,但我不确定它们有多令人信服:

  1. 更容易理解“作为对象的功能”。
  2. 它强制执行良好的分号习惯。
  3. 传统上没有太多的行李与功能和范围有关。
  4. 该页面上“命名函数表达式”的原因更具说服力,但仍然没有压倒性。

    顺便说一句,那些似乎来自John Resig(jQuery成名),在这里链接: http://ejohn.org/blog/javascript-as-a-first-language/