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
- 执行到script标签时进入作用于;
- 当执行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