JavaScript的进阶之路(二)函数简介,变量、功用域和内部存款和储蓄器难点

 <h3>ECMAScript中等高校函授数不设有函数签名的定义,没有重载</h3>
<h3>无需点名重回值,能够在此外时候回来任何值。未钦赐再次回到值的函数,再次来到的是3个奇异的undefined值</h3>

<script type="text/javascript">
            function sayHi(){
                console.log("Hi");
            };
            sayHi();
            function sayName(name,age){
                console.log("我是"+name+",我今年"+age+"岁了!");
            };
            sayName("吴琼",18);
            function sum(num1,num2){
                return num1+num2;
                alert("我不会被执行到!");  //位于return语句之后的任何代码都不会执行。
            }
            sum(1,2);
            function compare(n1,n2){
                if(n1<n2){
                    console.log(n1+"小于"+n2);
                }else if(n2<n1){
                    console.log(n2+"小于"+n1);
                }else{
                    console.log("他们俩相等!");
                }
            }
            compare(2,2);
        </script>

<h1>基本类型和引用类型的值</h1>
<h3>在操作对象时,实际上是在操作对象的引用,而不是事实上的靶子。</h3>
<h3
class=”red”>基本项目具有动态的值,引用类型具有动态的属性。</h3>
<h3
class=”red”>复制变量值:基础项目是复制二个新值;引用类型是复制多少个指南针。</h3>
<h3
class=”red”>传递参数:能够把函数的参数当成1个片段变量。基本项目传递参数是复制值给二个部分变量,引用类型传递参数是复制二个地点给变量对象;</h3>
<h2
class=”red”>在此以前说到函数的参数是按值传递的,那么复制的那几个地点能够视作3个值吗?答案:能够。为啥?</h2>
<h3>检查和测试变量:typeof
操作符能够鲜明一个变量是字符串、数值、布尔值,如故undefined的一流工具。检查和测试对象时,用instanceof操作符。</h3>

<h1>执行环境(也称成效域)</h1>
<h3>每一个环境都有一个与之提到的变量对象。执行环境有2种:全局和一些(函数)。</h3>
<h3 class=”red”>成效域链的成效:保障 (对施行环境有权访问的
)(所有变量和函数的) 有序访问;</h3>
<h3>成效域链的前端始终都以所在环境的与之提到的变量对象。在Web浏览器中,window对象始终是最上端。</h3>
<h3>函数的参数也被当成变量来对待,访问规则与实施环境中的其余变量相同。</h3>
<h2>延长成效域链</h2>
<h3>try{}catch(e){}语句的catch块 和
with语句能够延长作用域链。</h3>
<h2>没有块级成效域:像if语句中评释的变量和for语句中声称的循环变量,在外部均能够访问到;</h2>
<h3>在函数中的变量要是想在外表访问,必须是全局变量(没有var注明的变量)。</h3>
<h3>在函数中的变量查找规则是从内条件到外环境。</h3>
<h1>垃圾收集:找出那多少个不在继续接纳的变量,然后释放其占据的内部存款和储蓄器。常见的3个政策:标记清除和引用计数。</h1>
<h3>关于垃圾收集发出的习性难点:IE6私下认可值,IE7依照内部存储器用量动态的改动值,品质比IE6大大进步。</h3>
<h3>关于管理内部存款和储蓄器:JavaScript分配给Web浏览器的可用内部存款和储蓄器量比分配给桌面应用程序的要少。</h3>
<h2 class=”red”>内部存款和储蓄器限制会影响网页的属性:一 、给变量分配的内部存款和储蓄器二 、调用栈以及在2个线程中还要执行的说话数量。</h2>
<h2
class=”red”>确定保证占用最少的内部存款和储蓄器能够让页面获得更好的习性。而优化内部存储器占用的最好办法就是为履行中的代码只保留须求的数额。</h2>
<h2
class=”red”>解除引用:将用不到的全局变量设置为null来刑满释放解除劳教其引用。此时,并没有自由内存,只是让值脱离了推行环境,下次垃圾回收时再自由。</h2>

<script type="text/javascript">
            var a=1;
            var b=a;
            delete a;
            console.log(b); //a对b没有任何影响
            var obj1=new Object();
            var obj3=new Object();    
            var obj2=obj1;
            obj1.name="吴琼";
            console.log(obj2.name);
            obj2.name="张虹";
            console.log(obj1.name);
            console.log(obj3.name);
            var num = 1;
            function add(sum){
                sum+=10;
                console.log(sum);
            };
            add(num);  // 基本类型传递参数是把变量num的值复制给一个局部变量sum;
            console.log(num);  //变量的值并没有改变
            function odd(obj){
                obj.name="吴琼";
            }
            var person = new Object();
            odd(person);
            console.log(person.name); 

            function odd2(obj){
                obj.name="吴琼";
                var obj = new Object();   //在函数内的变量引用的是一个局部对象,在函数执行完毕后会立即被销毁;
                obj.name="张虹";
            };
            var person2=new Object();
            odd(person2);   //把person2传递给odd2()方法后,其name属性的值被定义为“吴琼”,如果是按引用传递的,则obj的name会被修改;
            console.log(person2.name);
            console.log(odd instanceof Function);
            //测试没有块级作用域
            if(true){
                var color = "red";
            }
            console.log(color);  // red//测试没有块级作用域
            for(var i=0;i<10;i++){
                //
            };
            console.log(i); //10 //测试没有块级作用域
            //函数中的变量在外部访问
            var sum;
            function fn(num1,num2){
                sum = num1+num2;
            };
            fn(1,2);
            console.log(sum);  //如果函数内声明var sum 则报错sum is not defind
            //作用域链的查询
            var col = "black";
            function getCol(){
                var col = "blue";  //从内到外查找  如果有这个声明,则 blue
                return col;
            }
            console.log(getCol());  //blue
            getCol();  //执行方法后,函数内用var 声明的变量依然为局部变量
            console.log(col);//black
        </script>