【问题标题】:Javascript function as parameter - Browser compatibilityJavascript 函数作为参数 - 浏览器兼容性
【发布时间】:2013-06-29 15:49:13
【问题描述】:

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

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

【问题讨论】:

  • AFAIK 你可以使用匿名函数作为表达式,并像 IE6 之前的变量一样传递命名函数,所以这从来都不是问题。
  • addEventListenerattachEvent 都将函数作为参数,因此只要它们是来自 javascript 的事件处理,它就受到支持,这可能是 javascript 的第一个起源,因为你不能这样做没有事件处理的javascript很多。
  • 它一直受到支持,这并不让我感到惊讶,因为它是 JavaScript 的定义特性之一。您可以在此处阅读第一个规范:ecma-international.org/publications/files/ECMA-ST-ARCH/…

标签: javascript function parameters cross-browser


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    1

    这是一个核心语言特性。

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

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

    【讨论】:

      【解决方案3】:

      在所有 JavaScript 支持 Internet Explorer 6 之前的浏览器。

      我能在上面找到的第一个文档是 ECMA-262,最早可以追溯到 1997 年。

      如果您谈论的是完全支持,旧版本的 IE (even up to IE8) 在 named 函数表达式 中存在变量泄漏,其中 函数表达式的>name在父作用域中被定义和设置,就好像它实际上是一个声明的函数

      // 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
      

      【讨论】:

        猜你喜欢
        • 2012-10-19
        • 2011-09-01
        • 2013-02-23
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 2012-08-09
        相关资源
        最近更新 更多