zoukankan      html  css  js  c++  java
  • js闭包

    //闭包引起的bug
    function bug() {
    var nums = [];
    for (var i = 0; i < 3; i++) {
    nums[i] = function () {
    return i;
    };
    }
    return nums;
    }
    var nums_bug = bug();
    console.log(nums_bug[0]());
    console.log(nums_bug[1]());
    console.log(nums_bug[2]());
    //修复bug
    function fbug() {
    var nums = [];
    for (var i = 0; i < 3; i++) {
    nums[i] = (function (i) {
    return i;
    })(i);
    }
    return nums;
    }
    var nums = fbug();
    console.log(nums);
    //nums[0](); 0
    //nums[1](); 1
    //nums[2](); 2

    //隔离变量作用域
    (function(){
    var name = "zs";
    function a(){
    name = 'sss';
    }
    })();
    (function(){
    var name = "ls";
    function a(){
    name = 'vvv';
    }
    })();

    //计数器
    //普通实现
    var num = 0;
    function countNum(){
    num ++;
    }
    countNum();
    console.log(num);
    //闭包实现
    var counter = (function(){
    var counterPer = 0;
    return function(){
    return counterPer++;
    }
    })();
    console.log(counter());

    var counter=(function(){
    //赋初值
    var count=0;
    //外部调用时形成闭包
    return function(){
    return count++;
    }
    })();
    //声明私有变量

    /*function People(){
    this.name = '张三';
    }
    var p = new People();
    console.log(p.name);*/
    //直接可以.来进行访问,这是公有属性,安全性差
    //私有属性是通过.访问不到的

    var People = (function(){
    var name = '';
    function People(){

    }
    People.prototype = {
    getName : function(){
    return name;
    },
    setName : function(newName){
    name = newName;
    }
    }
    return People;
    })();
    var p = new People();

    //this
    var test = '李四';
    function th_test(){
    console.log(this.test);
    }

    function bth_test(){
    var test = '王五';
    return function(){
    console.log(this.test);
    }
    }
    //this永远指向调用它的对象
  • 相关阅读:
    PotPlayer直播源分享
    关于MySQL服务无法正常启动问题
    MySQL介绍及安装环境配置
    MySQL 常用命令
    Oracle【序列、索引、视图、分页】
    Oracle【二维表的维护】
    Oracle【二维表管理:约束】
    JDBC事务
    JDBC的两种sql命令发送器比较【Statement:PreparedStatement】
    mysql InnoDB存储引擎
  • 原文地址:https://www.cnblogs.com/staticed/p/8549582.html
Copyright © 2011-2022 走看看