收藏此站 联系我们 网站
当前位置:首页» 公司新闻 » 【建站服务】张家界设计网页公司-域名申请

【建站服务】张家界设计网页公司-域名申请

作者: 风兰 . 阅读量: 10 . 发表时间:2022-09-21 03:45:44

网站建设
​

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


张家界设计网页公司

网站建设.png

  1. 是在提供了一个在外部访问另一个函数内部局部变量的方式。

    var add = (function(){
        var count = 0;//外部访问的计数器,局部变量.
        var fun = function(){
            return ++count;
        }
        return fun;})();
        
        //还可以这样写
        var add2 = (function(){
            var count = 0;//外部访问的计数器,局部变量.
            function plus(){
                return ++count;
        }
        return plus;})();
        //还可以这样写var add3 = (function(){
        var count = 0;//外部访问的计数器,局部变量.
        return function(){
            return ++count;
        }})();
    MRL

       MRL

      lwq***@163.com

    5年前 (2018-01-26)
  2.    风之翼

      kof***dj@aliyun.com

    109

    闭包就是个bug。我相信作者在写javascript的时候都没想到用户会这么用。

    闭包其实是利用了一个变量退出作用域的时候,暂时没有被销毁,它的值还在,如果后面有变量也叫这个名字,那这个数据会被重新利用起来。你会发现,后面你使用的这个名字一样的变量是有初值的。下面的例子可以看出问题来。

    <p>局部变量计数。</p><button type="button" onclick="myFunction()">计数!</button><p id="demo">0</p><script>{
        var tmp = 2; //理论上在退出语句块后,这个变量要被释放掉的。包括内存可能被回收。但事实并非如此,会影响后面和他同名的变量}var add = (function () {
        //var counter = 0; //这里注释掉.其实和上面的tmp一样的道理。这里在函数自己执行完后就应该销毁了的。
        //return function () {return counter  += 1;} //这里的counter已经不是上面的counter了,是一个全局变量。有初值,受上面影响,初值为0
        return function () {return tmp += 1;} //这里tmp就是个全局变量。它是有初值的。为上面的2})();


闭包就是个bug。我相信作者在写javascript的时候都没想到用户会这么用。


闭包其实是利用了一个变量退出作用域的时候,暂时没有被销毁,它的值还在,如果后面有变量也叫这个名字,那这个数据会被重新利用起来。你会发现,后面你使用的这个名字一样的变量是有初值的。下面的例子可以看出问题来。


<p>局部变量计数。</p>

<button type="button" onclick="myFunction()">计数!</button>

<p id="demo">0</p>

<script>

{

    var tmp = 2; //理论上在退出语句块后,这个变量要被释放掉的。包括内存可能被回收。但事实并非如此,会影响后面和他同名的变量

}


var add = (function () {

    //var counter = 0; //这里注释掉.其实和上面的tmp一样的道理。这里在函数自己执行完后就应该销毁了的。

    //return function () {return counter  += 1;} //这里的counter已经不是上面的counter了,是一个全局变量。有初值,受上面影响,初值为0

    return function () {return tmp += 1;} //这里tmp就是个全局变量。它是有初值的。为上面的2


})();

function myFunction(){

    document.getElementById("demo").innerHTML = add();//3

    document.getElementById("demo").innerHTML = add();//4

    document.getElementById("demo").innerHTML = add(); //5

}


</script>

尝试一下 »


执行上面的代码可以看的很清楚。计数器一样正常工作。


所以,闭包就是利用了个bug: 退出作用域的变量不会立即销毁。会影响后面的同名变量。


但不知道后面的javascript版本会不会修改这种机制。


所以代码这么写是不可靠的。太依赖于javascript的内部实现了。


其实要实现全局计数器的需求。正常的做法是:


定义一个全局对象。这个对象定义自己的属性和方法add。


用的时候 对象.add 就可以了。这个才正常。


上面用闭包的方式太过巧妙,给人的感觉就是在夹缝中求生存。用起来也不舒服吧。


风之翼

   风之翼


  kof***dj@aliyun.com


4年前 (2018-03-14)

   TriumPH


  870***185@qq.com


29

5楼说的太对了,这个 bug 用着真不痛快,针对这个例子写了点代码:


局部变量计数。


<button type="button" onclick="myFunction()">计数!</button>

<p id="demo">0</p>

<script>

var add = new Object();

add.count = 0;

add.plus = function()

{

    this.count++;

}

function myFunction(){


张家界设计网页公司


上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设:上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务