zoukankan      html  css  js  c++  java
  • function声明函数在浏览器中这么一个问题

    先看这么一段代码

    (function(){

      alert( myname() );

      function myname(){

        return "nick"

      }

    })();

    上面代码在各个浏览器里的运行结果是一致的,这是因为在javascript里面,用function 声明的函数

    是会在函数执行环境初期便构造完函数体,也可以说是一种预解析吧,于是,即便myname的声明代码

    在myname的执行后面,也是可以正确的执行的。

    但是我们这样修改下

    (function(){

      alert( myname() );

      if (true) {

        function myname(){

          return "nick"

        }

      }

    })();

    然后会发现浏览器的解析出现了差异。

    最新版本的firefox和ie8 会抛出错误异常 ReferenError: myname is not defined

    是的,其他浏览器均正常。

    也就是说,上面的匿名函数的执行环境初始化的时候,其内部活动对象Active Object里面,没有myname这个属性

    也就是说,这可能是firefox等做的一些引擎上的优化,加快引擎的效率,块级作用域屏蔽了匿名函数作用域链对该块作用域的初始化。

    最后,也想在这里疾呼,虽然js很灵活,有他自己的脾性,但是在真正的项目应用里面,还是要有良好的书写规范,最好是按照c的经典

    先声明后实现的规范来编程。

  • 相关阅读:
    有关base64编码算法的相关操作
    不宜多吃的十种垃圾食品
    ~ 無 淚 的 天 使 ~
    Datagrid 中添加ComboBox 的两种方法(winform)
    刀兄写的IIS管理类(C#)
    17种常用正则表达式
    正则表达式经典 (转)
    C#中Pinvoke的使用
    C#中Pinvoke的使用2
    异步操作样本
  • 原文地址:https://www.cnblogs.com/litao229/p/2336028.html
Copyright © 2011-2022 走看看