About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • May

    25

    JS 中 with 语句块内的定义的变量作用域

    • 0 Comments
    • JavaScript
    • 发布:古树
    • 引用:0
    • 浏览:

    使用 with 语句虽然能使用代码变简洁,减少代码的输入量,但它并不被开发者们推荐(甚至在 ECMAScript 5 的严格模式中遭到了禁用)。因为在使用 with 语句时,代码的运行速度会比不使用时更慢。并且在 with 语句内定义的变量作用域情况比较复杂,也会让初学者迷惑。看以下样例代码:

    <script>
    function fun(){
        var x = 9;
        var y = 10
        with(Math){
            var larger = max(x,y);//显示声明,这个变量是定义在函数内的,作用域是在函数层级,与x、y相同。
        }
        alert(larger);//10
        alert(Math.larger);//undefined;虽然在with内声明,但并不属于with的目标对象。
    }
    fun();
    alert(larger);//访问不存在的变量,这里就会产生一个异常,因为在函数外没有定义。
    </script>

    然后再试一下隐式声明:

    <script>
    function fun(){
        var x = 9;
        var y = 10
        with(Math){
            larger = max(x,y);//隐式声明一个变量时它的作用域是全局的
        }
        alert(larger);//10
        alert(Math.larger);//undefined;
    }
    fun();
    alert(larger);//10,访问全局的变量。
    </script>

    备注:由于 AS 与 JS 遵循相同的 ECMA-262 标准,尤其是熟悉和精通 AS1、AS1.1、AS2 的人可能会对这种 JS 的作用域更熟悉(AS1.1 与 JS 之间完全可以轻松的共享代码)。

    相关文章:
      Post Comment.

      发表评论