1

我知道几乎所有现代浏览器都可以将函数名称作为参数传递,但我想知道旧浏览器的兼容性:

  1. 支持它的第一个 JavaScript/ECMAScript 版本是什么?从 JavaScript 的第一天开始就支持它吗?(这会让我感到惊讶)
  2. 最先支持它的每个主要浏览器(Google Chrome、Firefox、IE、Safari、Opera 等)的版本是什么?
4

3 回答 3

0

据我所知,函数一直是对象,对象也一直可以作为参数传递。

于 2013-06-29T15:53:48.957 回答
0

自 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
于 2013-06-29T15:58:38.187 回答
0

支持它的第一个 JavaScript/ECMAScript 版本是什么?从 JavaScript 的第一天开始就支持它吗?(这会让我感到惊讶)

1

这是一个核心语言特性。

最先支持它的每个主要浏览器(Google Chrome、Firefox、IE、Safari、Opera 等)的版本是什么?

最早支持 JS 的浏览器都支持。

于 2013-06-29T15:58:45.257 回答