为什么logfunc“未定义”?

  var logfunc = function(obj) {
     return function() {
       console.log(obj)
     }
   }

  t += '<a onclick="logfunc(this)">&lt;</a>'

最佳答案

如果在全局范围fiddle之外声明对longfunc的引用,将无法访问

我不主张通过省略var在全局范围内直接声明变量,但这是一个很好的例子:

function setupStuff() {
    var logfunc = function(obj) { //defined within setupStuff scope
        /*...*/
    }
    t += '<a onclick="logfunc(this)">&lt;</a>';
}

function setupStuffDifferently() {
    logfuncB = function(obj) { //defined in the global scope
       /*...*/
    }
    t += '<a onclick="logfuncB(this)">&lt;</a>';
}


我宁愿看到函数像这样单独声明

t += '<a onclick="logfunc(this)">&lt;</a>';

function logfunc(obj) { //this would work when assigned through `onclick`
       /*...*/
}


如果您可以使用该选项,我建议您使用类似jQuery的库,该库在assigning and handling click events中提供了更大的灵活性。

07-24 09:26