我知道几乎所有现代浏览器都可以将函数名称作为参数传递,但我想知道旧浏览器的兼容性:
- 支持它的第一个 JavaScript/ECMAScript 版本是什么?从 JavaScript 的第一天开始就支持它吗?(这会让我感到惊讶)
- 最先支持它的每个主要浏览器(Google Chrome、Firefox、IE、Safari、Opera 等)的版本是什么?
我知道几乎所有现代浏览器都可以将函数名称作为参数传递,但我想知道旧浏览器的兼容性:
据我所知,函数一直是对象,对象也一直可以作为参数传递。
自 Internet Explorer 6 之前,所有支持JavaScript的浏览器都可以使用匿名函数作为表达式和传递声明函数的名称。
我可以在上面找到的第一个文档是ECMA-262,它的历史可以追溯到 1997 年。
如果您谈论的是完全支持,旧版本的 IE(甚至高达 IE8)在命名函数表达式中存在变量泄漏,其中函数表达式的名称在父作用域中被定义和设置,就好像它是实际上是一个声明的函数。
// Assuming old JScript engine
typeof foo; // "undefined", expected, it's not been defined yet
bar; // defined as if hoisted function declaration, unexpected
var foo = function bar() {};
foo; // as expected
bar; // identical to foo, not expected
foo === bar; // false, they're actually different function objects in memory
支持它的第一个 JavaScript/ECMAScript 版本是什么?从 JavaScript 的第一天开始就支持它吗?(这会让我感到惊讶)
1
这是一个核心语言特性。
最先支持它的每个主要浏览器(Google Chrome、Firefox、IE、Safari、Opera 等)的版本是什么?
最早支持 JS 的浏览器都支持。