2017年二月月 发布的文章

javascript的作用域必包

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

function foo(){
   var a = 2;
   function bar(){
      console.log(a);
   }
   return bar;
}
var baz = foo()......

查看详细

javascript的提升

什么是提升?

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

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

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

var a;
a = 2;
c......

查看详细

javascript中的块级作用域

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

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

查看详细

javascript隐藏内部实现的优点

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

function doSomeThing(a){
   b = a + doSo......

查看详细

javascript作用域——词法作用域

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

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

词法作用域就是在词法阶段的定义作用域的位置。即,在编写代码时变量和块作用域写在哪里,词法分析器在处理代码时……

查看详细

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

当我们看到语句

var a = 0;

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

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

zuoyongyu01

引擎解析过程大致是:

    ……

查看详细