js适配器模式、作用域

js适配器模式:

// 适配器
    var googleMap = {
      show: function () {
        console.log("开始渲染谷歌地图");
      }
    }
    var baiduMap = {
      display: function () {
        console.log("开始渲染百度地图");
      }
    }

    var baiduAdapter = {
      show: function () {
        return baiduMap.display();
      }
    }
    var renderMap = function (map) {
      if (map.show instanceof Function) {
        map.show();
      }
    }

    renderMap(googleMap);
    renderMap(baiduAdapter);
var getbeijingCity = (function () {
      var beijingCity = [{
          name: "chaoyang",
          id: 11
        },
        {
          name: "haidian",
          id: 12
        },
        {
          name: "daqing",
          id: 13
        }
      ]
      return beijingCity;
    })();

    var render = function (fn) {
      console.log("开始渲染北京地图");
      document.write(JSON.stringify(fn));
    }

    // 适配
    var addressAdpater = function (oldAdressFn) {
      var address = {};
      oldAdressFn.forEach(function (c) {
        address[c.name] = c.id;
      });
      return address;
    }

    // render(getbeijingCity);
    // console.log(getbeijingCity);

    render(addressAdpater(getbeijingCity));

作用域

console.log(a);
    // function a() {
    //   console.log(4);
    // }
    var a = 1;
    console.log(a); //1

    function a() {
      console.log(2);
    }
    console.log(a); //1
    var a = 3;
    console.log(a); //3

    function a() {
      console.log(4);
    }
    console.log(a); //3
    a(); // a is not a function
  1. 执行到script标签时进入作用于;
  2. 当执行function时进入作用于;
进入作用域后, 发生了什么
1. 域解析;
1) 在内存开辟空间;
2) 从上到下找, 有没有var 有没有方法参数, 有没有function;
如果找到了var和方法参数, 就会把var和方法参数声明的变量赋值为undefined存在空间里;
如果有Function, 就会把Function的所以内容存在空间里;
2. js逐行执行
找表达式( = == ++ + -)

在这里插入图片描述

	var a = 1;

    function fn1() {
      console.log(a); //undefined
      var a = 2;
    }
    fn1();
    console.log(a); //1

当执行function时进入作用于;(开辟一个新的作用域)

进入作用域后, 发生了什么
1. 域解析;
1) 在内存开辟空间;

在这里插入图片描述

var a = 1;

    function fn1() {
      console.log(a); //1
      a = 2;
    }
    fn1();
    console.log(a); //2

在fn1()作用域中没有找到 var 就会向上级找,(作用域链);
如果在上级没找到就会报错,如果找到了,在fn1()中修改了,上级作用域也会修改;

在这里插入图片描述

var a = 1;

    function fn1(a) {
      console.log(a); //undefind
      a = 2;
    }
    fn1();
    console.log(a); //1


    //相当于var a
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值