5

为什么 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
}
4

1 回答 1

3

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

从这里的优秀参考:http: //shichuan.github.com/javascript-patterns/

提供了这些理由,但我不确定它们的说服力如何:

  1. 更容易理解“作为对象的功能”。
  2. 它强制执行良好的分号习惯。
  3. 没有太多传统上与功能和范围相关的包袱。

该页面上“命名函数表达式”的原因更有说服力,但仍然不是压倒性的。

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

于 2012-04-13T00:38:13.460 回答