JavaScript中的作用域链

Eddy 发布于2013-11-5 16:57:33 分类: 技术心得 已浏览loading 网友评论0条 我要评论

看下面这段代码:



<!doctype html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>js</title>

</head>

<body>

    <button id="button-1">first</button>

    <button id="button-2">second</button>

    <button id="button-3">third</button>


    <button id="button2-1">2first</button>

    <button id="button2-2">2second</button>

    <button id="button2-3">2third</button>


    <script type="text/javascript">

        for (var i = 1; i < 4; i++) {

            document.getElementById('button-' + i).onclick=function(local_i){

                return function(){

                    alert(local_i);

                };

            }(i);

        }


        for (var i = 1; i < 4; i++) {

            document.getElementById('button2-' + i).onclick=function(){

                alert(i);

            };

        }

    </script>

</body>

</html>



点击first、second、three按钮分别输出几呢?点击2first、2second、2three按钮又分别输出几呢?你能说出结果吗?你能解释为何会有此结果吗?


JS和PHP不同,在JS中,一个函数在函数内部可以直接访问到函数外部的变量(PHP中不行,不过可以用5.3引入的闭包或是global关键字实现),简单说这就是所谓的作用域链。另外如果在函数A内部定义一个全局函数B,那么函数A调用完成,B仍然对A函数作用域保留有一份引用,也就是说这时候调用B函数,仍然可以访问到A函数作用域内的变量。注意是保留的是引用,不是值。


明白上面的知识,应该可以回答并解释出文章开头的问题了~~~

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/890.html     欢迎订阅Eddy Blog

关于 javascript  作用域链  的相关文章

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言