以下代码在firefox浏览器中的某个版本上发生了错误 - linksHandle is not defined
。
代码由一个函数组成,该函数底部有一个名为linksHandle的函数。据我所知,当调用它所定义的函数时,该函数应该被提升。
因此,为事件定义的功能& mMenuReady'应该能够访问它,因为它包含了在其执行上下文中定义的所有函数和变量。
为什么有些firefox版本需要先定义函数声明(linksHandle)才能使用'mmenu'回调以封闭函数?
document.addEventListener('readystatechange', function() {
if (document.readyState === 'interactive') {
if (typeof jQuery === 'function') {
// callback function that is invoked later by the event that is triggered -> $(window).trigger("mMenuReady")
$(window).on('mMenuReady', function() {
var links2 = Array.prototype.slice.call(document.querySelectorAll('#mm-mainMenu a'));
links2.forEach(linksHandle);
});
}
function linksHandle(elem) {
// function code
}
}
});
答案 0 :(得分:1)
Function declarations inside blocks。它们会在if
正文中提升(而不是整个函数),但在较早版本的FF中却没有将"function statements"实现为未被提升(实际上completely invalid in strict mode) caused issues like yours