判断登陆状态方案

目标

  •  判断用户登陆失效状态,并提示用户重新登陆

情况

  1. 页面请求需判断;
  2. 接口请求需判断;

方案

  1. 页面请求——通过server拦截器判断user状态,采用重定向到login;
  2. 接口请求(非页面请求)——通过ajax回调,得到server返回状态码,页面跳转login;
  3. comet方式——server 长链接方式 push us……

查看详细

无限扩展的module方法

一般我们定义module的方式使用字面量的方式,一个方法一个方法的编写。这种方式直观且便于理解。今天看到一种可以无线扩展的module写法,很有意思,拿来共享,代码:

var myModule = (function manger(){
	var modules = {};
	function define(name, deps, impl){
		for(var i = 0; i <......

查看详细

js 中的module模式

module的原理是利用必包实现。来看下面的代码:

function coolModule(){
	var someThing  =  'cool';
	var anther = [1,2,3];

	function doSomeThing(){
		console.log(someThing);
	}
	function doAnther(){
		console.log(a......

查看详细

javascript的作用域必包

当函数可以持有并访问作用域,就产生了必包,即使函数在作用域外执行;

function foo(){
   var a = 2;
   function bar(){
      console.log(a);
   }
   return bar;
}
var baz = foo();
baz(); // 这就是必包!

函数bar可以访问foo的内部作用域,又将bar引用的函数……

查看详细

javascript的提升

什么是提升?

看下代码,各输出结果是什么。

a = 2;
var a;
console.log(a);
console.log(a);
var a = 2;

第一段代码输出2;第二段输出undefined;来看看发生了什么?来看下编译器的处理形式:

var a;
a = 2;
console.log(a); //2
var a;
console.log(a); //unde......

查看详细

javascript 垃圾回收小技巧

直接上代码:

"use strict"
function process(data){
   console.log(data);
}
let someBigData = {
   vvv : 1,
   ccc : 2
}
process(someBigData);
console.log(someBigData);

上面中代码someBigData被process调用后没……

查看详细

javascript中的块级作用域

ES5中是没有块级作用域,只有全局作用域和函数作用域的概念。常见的错误如下:

var obj = {};
for(var i = 0; i < 3; i++){
   var p = i;
   obj[i] = function(){
      console.log(p);
   }
}
obj[0]();//2
obj[1]();//2
obj[2]();//2

……

查看详细

javascript隐藏内部实现的优点

这篇文章是从另一个角度来理解作用域的使用。作用域正常是在语法在声明的变量或函数的位置决定的。反过来想,我们可以把语法用作用域来包裹。这样做的出于软件设计中最小特权原则(最小化的授权 和 最小化的暴露),来看下代码:

function doSomeThing(a){
   b = a + doSomeThingElse(a * 2);
   console.log(b * 3);
}
fu......

查看详细

javascript作用域——词法作用域

首先,作用域是一套规则,让引擎可以在作用域和嵌套的子作用域中根据标示符查找变量。

作用域模型一般分为两种,词法作用域和动态作用域。javascript作用域使用的类型是词法作用域。

词法作用域就是在词法阶段的定义作用域的位置。即,在编写代码时变量和块作用域写在哪里,词法分析器在处理代码时会保持作用域在位置不变(大部分情况是这样的)。

变量查找会在使用的作用域中进行查找,如果未找到……

查看详细

从引擎、编译器、作用域的角度看js编译过程

当我们看到语句

var a = 0;

时,一般都认为是声明一个变量。但引擎认为这是两个声明,一个由编译器在编译时处理,一个在引擎运行时进行处理。引擎是怎样处理的呢?

假设以下是存在两个作用域,里面是我们要用到的,外面是其他不使用的作用域,如图:

zuoyongyu01

引擎解析过程大致是:

  1. 编译器分词var a; a = 0;
  2. 处理var a,编译器查询“使用的作用域”中是否存在a……

查看详细