第12天:作用域与闭包

1.js 无块作用域。

while(true){
                var num=10;
                break;
            }
            console.log(num);

2.作用域 由里到外,层层调用。

3.闭包模式:函数内中包含函数。函数内置包含对象。

闭包的作用:缓存数据,如 s.但延长了作用域,一般情况下s 作为局部变量,在f4()函数运行结束后,内存释放。但由于闭包,ff(),s 的值未能释放。
            function f4(){
                var s=100;
                return function f2(){
                    s++;
                    return s;
                }
                
            }
            var ff=f4();
            console.log(ff());
            console.log(ff());
            console.log(ff);

result:[Web浏览器] "101"    /frontEnd/bind/include.html (42)
[Web浏览器] "102"    /frontEnd/bind/include.html (43)
[Web浏览器] "function f2(){
                    s++;
                    return s;
                }"    /frontEnd/bind/include.html (44)

4.沙箱

写在函数内相对独立的一块,里面定义的都是局部变量,可以访问外面的全局变量。里面的声明的变量及对象具有预编译的作用。eg:

var num="456";
            (function(){
                console.log(num);     //声明会提前,但是未赋值, 因此输出 undefined
                var num="123";
            }());

result:[Web浏览器] "undefined"    /frontEnd/bind/sandbox.html (11)

沙箱 可以避免变量与函数名相同出错的问题,可把重名的部分函数及代码块放入沙箱中。

(function(){

}());

5.遍历DOM 树。

var root=document.docuementElement;  得到 根节点

var children=root.children;  得到子节点的集合。

<script>
        
        var root=document.documentElement;
//        console.log(root.nodeName);
        //找打所有子节点
        function findChildren(root){
            var children=root.children; //root.children 输出节点   root.chilrdenNodes  非IE输出节点和#text 
            for(var i=0;i<children.length;i++){
                var childrenNode=children[i];
                console.log(childrenNode.nodeName);
                travalChildren(childrenNode);
            }
        }
//        findChildren(root);
        //遍历所有子节点的函数
        function travalChildren(childrenNode){
            childrenNode.children&&findChildren(childrenNode);
        }
        findChildren(root);
        
    </script>

6.真数组与伪数组。

真数组长度可变,假数组长度不可变。

var ss=[10,20,30];
            console.log(ss.length);             =========》3
            ss[3]=40;
            console.log(ss.length);            =========》4
            console.log(ss[0]);                  =========》10;
            
对象:伪数组            

var st={
                0:10,
                1:20,
                2:30,
                length:3
            };
            console.log(st[0]);                 ==========》10;
            console.log(st.length);          ==========》3

真数组能使用数组中的方法,伪数组可以使用数组中的方法。

            ss.forEach(function(ele){
                console.log(ele+1);                      ====》11,21,31,41;
            });

    function f1(){
                var sum=0;
//                for(var i in arguments){
//                    sum+=arguments[i];
//                }
                arguments.forEach(function(){            =========》报错;
                    
                });
                return sum;
            }
            console.log(f1(1,2,3));

猜你喜欢

转载自blog.csdn.net/zaoxi6240/article/details/84241929
今日推荐