美文网首页
局部变量的作用域变大了,大到函数

局部变量的作用域变大了,大到函数

作者: 海边拾贝 | 来源:发表于2015-12-10 14:27 被阅读0次
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <script type="text/javascript">
        function test() {
            //undefined escape from for{}
            alert(j);
            for (var i = 0; i < 3; i++) {
                var j = 1;
            }
            //escape from for{}
            alert(j);
        }
        //变量作用域,j可以逃出for{},但逃不出function
        //其他语言中,j连for{}都逃不出
        test();
        // not defined 直接报错
        alert(j);
    </script>
    </body>
    </html>
    

    普通对象:键值对的一个集合
    函数对象:键值对的一个集合
    可执行
    带两个隐藏的属性(函数上下文\函数代码)

    关于参数

    arguments本身并不是JS的数组对象.虽然它有length属性,并可以用索引下标访问每个元素,但是它没有JS数组对象那么多方法(如slice concat).若想在arguments上使用JS数组对象的方法,需要借用数组的方法:
    var newArgs=Array.prototype.slice.apply(arguments);
    这时候返回的newArgs就是slice增强版arguments
    apply()对参数对象进行增强并返回新的参数对象

    第一次alert(j)这个时候js已经感知到j的定义,但j没有赋值,所以是undefined
    可以认为function把所有的var声明提前到靠近function的开始位置
    第二次alert(j)已经赋值了
    第三次alert(j)是在function外,局部变量是逃不出function的,所以报错
    其次,i和j的作用域是一样的

    相关文章

      网友评论

          本文标题:局部变量的作用域变大了,大到函数

          本文链接:https://www.haomeiwen.com/subject/rdkyhttx.html